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


133

说我有以下课程:

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

然后列出以下类别的列表(List<ConfigItemType> MyList

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

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

我如何能适应MyListlistGoesHere使用值ConfigItemType.Name作为PARAMS字符串数组?

我相当确定Linq可以做到这一点。。。。但是MyList没有select方法(这是我会使用的方法)。

Answers:


278

你在找

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

由于Select是扩展方法,因此请确保通过添加一个名称空间来添加该名称空间

using System.Linq

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


我也是这么想的。但是Select不会显示在智能感知中。
瓦卡诺2011年

GAAAAAAA!我错过了linq include!
瓦卡诺2011年

1
您需要使用System.Data.Linq; 然后关注BrokenGlass的回答
Rami Shareef

1
我好蠢!呃,好吧。免费代表帮助我解决了这个问题。
瓦卡诺2011年

梦幻般的解决方案。我想访问对象列表中的字符串“ id”。做得完美 List<String> somestringlist = myobjectlist.Select(x => x.id).ToList();
Marty_in_a_Box

19

我相当确定Linq可以做到这一点。。。。但是MyList上没有select方法(这是我会使用的方法)。

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

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

问题最有可能是您没有引用System.Core,或者您缺少的using指令System.Linq



6

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

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

其中ConfigItemList是您的列表变量。


感谢您发布.NET 2.0人群!
webworm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.