2011-01-21 49 views
97

Nói rằng tôi có lớp sau:Chuyển đổi một danh sách các đối tượng đến một mảng của một trong những thuộc tính của đối tượng

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

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

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

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

Làm thế nào tôi có thể phù hợp MyList vào listGoesHere sử dụng giá trị trong ConfigItemType.Name là mảng chuỗi params?

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 pháp select trên đó (đó là những gì tôi đã sử dụng).

Trả lời

204

Bạn đang tìm kiếm

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

Kể từ Select là một phương pháp mở rộng đảm bảo để thêm không gian tên đó bằng cách thêm một

using System.Linq

đến tập tin của bạn - sau đó nó sẽ hiển thị với Intellisense .

+0

Đó cũng là những gì tôi nghĩ. Nhưng Chọn không hiển thị trong intellisense. – Vaccano

+0

+1 giống như của tôi –

+0

GAAAAAAA! Tôi đã thiếu LINQ bao gồm! – Vaccano

6

này cũng nên làm việc:

AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray()) 
16

Tôi khá chắc chắn rằng LINQ có thể làm được điều này .... nhưng MyList không có một phương pháp chọn vào nó (đó là những gì tôi đã sử dụng) .

Có, LINQ có thể thực hiện việc này. Nó chỉ đơn giản:

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

Nhiều khả năng vấn đề này là bạn hoặc là không có một tham chiếu đến System.Core, hoặc bạn đang thiếu một chỉ thị using cho System.Linq.

5

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

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

nơi ConfigItemList có thể thay đổi danh sách của bạn.

+0

Cảm ơn bạn đã đăng bài cho đám đông .NET 2.0! – webworm

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