LINQ:在IEnumerable<T>中分配属性值

3
以下是相应代码片段的LINQ版本:
```csharp var result = myArray.Where(x => x > 5).Select(x => x * 10); ```
List<Car> myCarList = ...;
foreach(Car c in myCarList)
{
if(c.Name.Equals("VW Passat"))
{
c.Color = Colors.Silver;
}
}

我尝试了以下的Select语句,它是可行的:

SELECT * FROM 表名

myCarList = myCarList.Where(c=>c.Name.Equals("VW Passat")).Select(c=> new Car(){Color=Colors.Silver, Name=c.Name}).ToList();

但是重新创建对象很麻烦,特别是当您需要传递许多属性时。如何更简单地做呢?

谢谢

1个回答

7
我可能会这样写:

我可能会这样写:

foreach (Car c in myCarList.Where(c => c.Name == "VW Passat"))
{
    c.Color = Colors.Silver;
}

在这里,LINQ查询被用于执行过滤操作,但普通的循环执行更新操作。你可以编写一个 Enumerable.ForEach 或者将其转换为列表并使用 List<T>.ForEach。但需要考虑到,Enumerable.ForEach 被故意省略了,因为这不是 LINQ 的预期用法。更多详情请参见此处:


1
只是礼貌地询问...这个 LINQ 版本比非 LINQ 版本更有效吗?为什么/为什么不? - ashutosh raina
@ashutoshraina:我怀疑这不会有太大的差别。如果很重要,就测量两者的性能。我预计非LINQ版本会稍微快一些,但我不能百分之百确定。 - Mark Byers
1
@Mark,为什么你把我在c.Name后面加的==又改回去了?有什么我不知道的吗? - xanatos
@xanatos:不好意思,那是一次意外——当我第一次回答时,我最初打错了字,当我后来编辑它以改进措辞时,它意外地恢复了你的更正。谢谢你试图修复它。我已经纠正了。 - Mark Byers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接