说我有以下课程:
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)
我如何能适应MyList到listGoesHere在使用值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.
这应该也有效:
AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray())
Run Code Online (Sandbox Code Playgroud)
对于像我这样坚持使用.NET 2.0的每个人,请尝试以下方式(适用于OP中的示例):
ConfigItemList.ConvertAll<string>(delegate (ConfigItemType ci)
{
return ci.Name;
}).ToArray();
Run Code Online (Sandbox Code Playgroud)
其中ConfigItemList是您的列表变量.