Chuyển đổi chuỗi thành List <string> trong một dòng?


100

Tôi có một chuỗi:

var names = "Brian,Joe,Chris";

Có cách nào để chuyển đổi này thành một List<string>phân tách bằng ,một dòng không?


15
Tôi không hiểu yêu cầu "trong một dòng". Hãy cố gắng viết mã rõ ràng và dễ hiểu, không phải là những cách để đưa một hoạt động vào một không gian càng nhỏ càng tốt.
Ed S.

6
Với sự ra đời của LINQ, "một lớp lót" có thể đọc được và sạch sẽ đã trở nên phổ biến hơn nhiều trong C # IMO.
Matt Greer

5
@Ed S. - Mặc dù tôi đồng ý rằng "trong một dòng" có thể không phải là cách tốt nhất để diễn đạt, nhưng các câu lệnh một dòng như câu mà Matt Greer cung cấp có xu hướng rất rõ ràng và dễ hiểu. Tôi đoán là anh ấy chỉ muốn tránh sử dụng một forvòng lặp, điều này tẻ nhạt hơn, dễ xảy ra lỗi và không rõ ràng.
StriplingWarrior

4
Tôi không có ý nói rằng một lớp lót vốn đã khó hiểu hơn, tôi chỉ nói rằng nó không bao giờ nên là một yêu cầu. Chỉ cần làm theo cách tốt nhất hiện có. Nếu điều đó xảy ra trong một dòng, tuyệt vời, nhưng nó không phải là thứ sẽ định hình cách bạn viết mã của mình.
Ed S.

Câu trả lời:


196
List<string> result = names.Split(new char[] { ',' }).ToList();

Hoặc thậm chí sạch hơn theo gợi ý của Dan:

List<string> result = names.Split(',').ToList();

11
Bạn có thể đã cố ý đặt nó ở đó, nhưng tôi luôn bỏ qua toàn bộ new char[] { }phần. Nó dễ đọc hơn theo cách đó, ít nhất đối với tôi .
Dan Tao,

4
@Dan: Tôi đồng ý, và nói chung tôi sử dụng quá tải tham số. Nhưng đối với câu trả lời cho một câu hỏi, đôi khi tôi cảm thấy như dài dòng thì tốt hơn. Chỉ là một vấn đề quan điểm thực sự.
Matt Greer

2
ToList () dường như không còn hoạt động nữa?
Gina Marano

10
Bạn đã mang System.LINQkhông gian tên vào chưa?
Matt Greer

42

List<T>một hàm tạo chấp nhận một IEnumerable<T>:

List<string> listOfNames = new List<string>(names.Split(','));

Tuyệt vời - không cần phải nhập khẩu System.Linq
VictorySaber

3

Tôi thích điều này hơn vì nó ngăn danh sách mục đơn lẻ có mục trống nếu chuỗi nguồn của bạn trống:

  IEnumerable<string> namesList = 
      !string.isNullOrEmpty(names) ? names.Split(',') : Enumerable.Empty<string>();


1
string given="Welcome To Programming";
List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list

đầu ra:

Welcome

To 

Programming

0

Nếu bạn đã có một danh sách và muốn thêm các giá trị từ một chuỗi phân tách, bạn có thể sử dụng AddRangehoặc InsertRange. Ví dụ:

existingList.AddRange(names.Split(','));

0

Sử dụng gói nuget Stringify.Library

//Default delimiter is ,
var split = new StringConverter().ConvertTo<List<string>>(names);

//You can also have your custom delimiter for e.g. ;
var split = new StringConverter().ConvertTo<List<string>>(names, new ConverterOptions { Delimiter = ';' });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.