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

Vac*_*ano 125 c# linq

说我有以下课程:

public class ConfigItemType
{
    public string Name { get; set; }
    public double SomeOtherThing { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

void AggregateValues(string someUnrelatedValue, params string[] listGoesHere)
Run Code Online (Sandbox Code Playgroud)

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

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

Bro*_*ass 262

你在找

MyList.Select(x=>x.Name).ToArray();
Run Code Online (Sandbox Code Playgroud)

由于Select是一个Extension方法,请确保通过添加一个来添加该命名空间

using System.Linq

到你的文件 - 然后它将显示Intellisense.


jas*_*son 19

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

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

MyList.Select(x => x.Name).ToArray();
Run Code Online (Sandbox Code Playgroud)

最有可能的问题是你要么没有引用System.Core,要么你错过了using指令System.Linq.


Sha*_*ard 6

这应该也有效:

AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray())
Run Code Online (Sandbox Code Playgroud)


Spy*_*osN 6

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

ConfigItemList.ConvertAll<string>(delegate (ConfigItemType ci) 
{ 
   return ci.Name; 
}).ToArray();
Run Code Online (Sandbox Code Playgroud)

其中ConfigItemList是您的列表变量.