当该不同类型在其构造函数中接受前一种类型时,有没有办法将IEnumerable列表(例如,字符串)“转换”(返回)到不同类型的IEnumerable列表?
例如,DataTable.Columns.AddRange()
方法仅接受列列表。有没有办法通过使用LINQ或某种聚合函数提供DataColumn
列表来返回string
列表?我想代码将粗略地执行以下操作,但是在一行中:
var columnList = new List<DataColumn>();
foreach (var item in myStringList)
{
columnList.Add(item);
}
return columnList;
同样,是否有一个聚合方法可以获取列表并针对特定方法运行其每个成员?例如,我正在寻找一种单行方式来执行以下类似的foreach
循环:
foreach (var item in myStringList)
{
myDataTable.Columns.Add(item);
}
显然,我正在寻找实际上并非依赖于数据列或字符串的通用答案。
答案 0 :(得分:3)
你可以写
var newList = list.ConvertAll(x => new Something(x));
list.ForEach(x => DoSomething(x));
这些方法由List<T>
类定义。
如果您有任意IEnumerable<T>
,则可以使用LINQ:
var newEnumerable = enumerable.Select(x => new Something(x));
答案 1 :(得分:2)
List<DataColumn> result = myStringList.Aggregate(
new List<DataColumn>(),
(list, item) => { list.Add(item); return list; }
);
return result;
那就是说,foreach声明更好。
答案 2 :(得分:1)
是的,事实上,虽然并非所有这些都是LINQ特定的。 ForEach只是一个List方法。对于你的两个例子:
myStringList.ForEach(x => columnList.Add(x));
// assumes myStringList is a List<T>... otherwise convert your enumerable using ToList()
ForEach方法采用Action并允许您对每个项目执行一些逻辑。因此,如果您想进行转换,那么与select:
结合就很容易了myStringList.Select(x => new DataColumn(x))
.ToList()
.ForEach(x => columnList.Add(x));
// transforms each element of the string by adding some text, then calling foreach
// on the items
答案 3 :(得分:0)
myStringList.ForEach(item =&gt; myDataTable.Columns.Add(item));
编辑:那不是Linq。对不起,我的错误。