Chuyển đổi danh sách các đối tượng thành một mảng thuộc một trong các thuộc tính của đối tượng


133

Nói rằng tôi có lớp sau:

public class ConfigItemType
{
    public string Name { get; set; }
    public double SomeOtherThing { get; set; }
}

và sau đó tôi lập một danh sách các lớp sau ( List<ConfigItemType> MyList)

Bây giờ tôi có một phương thức với chữ ký sau:

void AggregateValues(string someUnrelatedValue, params string[] listGoesHere)

Làm thế nào tôi có thể phù hợp MyListvới việc listGoesHeresử dụng giá trị trong ConfigItemType.Namemảng chuỗi params?

Tôi khá chắc chắn rằng Linq có thể làm điều này .... nhưng MyListkhông có selectphương pháp nào trên đó (đó là những gì tôi sẽ sử dụng).

Câu trả lời:


278

Bạn đang tìm kiếm

MyList.Select(x=>x.Name).ToArray();

Selectlà một phương thức Tiện ích mở rộng, hãy đảm bảo thêm không gian tên đó bằng cách thêm một

using System.Linq

vào tệp của bạn - sau đó nó sẽ hiển thị với Intellisense.


Đó là những gì tôi nghĩ là tốt. Nhưng Chọn không hiển thị trong intellisense.
Núi lửa

GAAAAAAA! Tôi đã bỏ lỡ linq bao gồm!
Núi lửa

1
bạn cần sử dụng bằng System.Data.Linq; sau đó làm theo câu trả lời của BrokenGlass
Rami Shareef

1
Tôi thật là ngốc! À Đại diện miễn phí đã giúp tôi tìm ra nó.
Núi lửa

giải pháp tuyệt vời. Tôi muốn truy cập Chuỗi "id" trong Danh sách đối tượng của mình. Đã hoạt động hoàn hảo List<String> somestringlist = myobjectlist.Select(x => x.id).ToList();
Marty_in_a_Box

19

Tôi khá chắc chắn rằng Linq có thể làm điều này .... nhưng MyList không có phương thức chọn trên đó (đó là những gì tôi sẽ sử dụng).

Vâng, LINQ có thể làm điều này. Nó đơn giản:

MyList.Select(x => x.Name).ToArray();

Vấn đề rất có thể là bạn không có tài liệu tham khảo System.Corehoặc bạn đang thiếu một usingchỉ thị cho System.Linq.



6

Đối với tất cả những người bị mắc kẹt với .NET 2.0, như tôi, hãy thử cách sau (áp dụng với ví dụ trong OP):

ConfigItemList.ConvertAll<string>(delegate (ConfigItemType ci) 
{ 
   return ci.Name; 
}).ToArray();

trong đó ConfigItemList là biến danh sách của bạn.


Cảm ơn bạn đã đăng bài cho đám đông .NET 2.0!
giun web
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.