将对象列表转换为对象属性之一的数组

时间:2011-01-21 23:53:48

标签: c# linq

说我有以下课程:

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

然后我列出了以下类(List<ConfigItemType> MyList

现在我有一个带有以下签名的方法:

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

如何使用MyList中的值作为params字符串数组,将listGoesHere放入ConfigItemType.Name

我很确定Linq可以做到这一点....但是MyList没有select方法(我会用它)。

4 个答案:

答案 0 :(得分:246)

您正在寻找

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

由于Select是扩展方法,因此请务必通过添加

来添加该命名空间

using System.Linq

到您的文件 - 然后它将显示Intellisense。

答案 1 :(得分:18)

  

我很确定Linq可以做到这一点......但MyList上没有select方法(这就是我应该使用的方法)。

是的,LINQ可以做到这一点。这很简单:

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

问题很可能是您没有System.Core的引用,或者您错过了using的{​​{1}}指令。

答案 2 :(得分:6)

这也应该有效:

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

答案 3 :(得分:5)

对于像我一样坚持使用.NET 2.0的每个人,请尝试以下方式(适用于OP中的示例):

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

其中 ConfigItemList 是您的列表变量。