2010-09-01 60 views
9

Tôi xin lỗi về tiêu đề gây nhầm lẫn, nhưng tôi không tìm thấy cách nào tốt hơn để giải thích vấn đề của mình.C# lấy danh sách từ một trường trong danh sách

Tôi có một danh sách các đối tượng, myList, cho phép gọi chúng là 'MyObject'. các đối tượng giống như thế này:

Class MyObject 
{ 
    int MYInt{get;set;} 
    string MYString{get;set;} 
} 

List<MyObject> myList; 
... 

Tôi đang tìm kiếm một đoạn ngắn/cách ưa thích/tốt đẹp để tạo ra một List<string> từ 'myList', nơi mà tôi đang sử dụng chỉ có 'MyString' bất động sản.

Tôi có thể làm điều này bằng cách sử dụng myList.forEach(), nhưng tôi đã tự hỏi nếu có một cách đẹp hơn

Cảm ơn !!

Trả lời

13

Với LINQ:

var list = myList.Select(o => o.MYString); 

Đó trả về một IEnumerable<string>. Để có được một List<string> chỉ cần thêm một cuộc gọi đến ToList():

var list = myList.Select(o => o.MYString).ToList(); 

Sau đó lặp qua các kết quả như bình thường:

foreach (string s in list) 
{ 
    Console.WriteLine(s); 
} 
+1

Có thể nói rằng nếu tất cả những gì bạn muốn làm là lặp lại, bạn không cần 'ToList()'. Chỉ sử dụng nếu bạn cần sửa đổi danh sách hoặc chỉ mục mới. – Timwi

1

Dưới đây là Ahmad's answer sử dụng cú pháp truy vấn tích hợp:

var strings = from x in myList 
       select x.MYString; 

List<string> list = strings.ToList(); 

này cũng có thể được viết:

List<string> list = (from x in myList 
        select x.MYString).ToList(); 
1

Không cần LINQ nếu danh sách đầu vào và đầu ra của bạn là cả hai List<T>. Bạn có thể sử dụng phương thức ConvertAll để thay thế:

List<string> listOfStrings = myList.ConvertAll(o => o.MYString); 
+0

tốt, trong trường hợp của tôi, đầu vào và đầu ra không giống nhau. đầu vào là Danh sách và đầu ra là Danh sách . sẽ convertAll() vẫn hoạt động? – edan

+0

“Không cần LINQ” nghĩa là gì? Nó không giống như LINQ là một thư viện hoàn toàn riêng biệt hoặc bất cứ điều gì, bạn biết. Cho dù bạn sử dụng '.ConvertAll' hay' .Select' thì không có sự khác biệt thực tế nào. – Timwi

+0

@edan: Có, 'ConvertAll' sẽ hoạt động, như trong ví dụ trên. – LukeH

Các vấn đề liên quan