在C#中优化Linq

Haf*_*z H 4 c# linq

我有列列表,我需要将除了两列的Isselected指定为true.(错误和功能).我已经使用以下代码来实现它并且工作正常,但有没有快速或简单的方法来实现相同的目的?

DisplayColumns.ToList().ForEach(a => a.IsSelected = true);
DisplayColumns.ToList().Where(a => a.ColumnName == "Bug" ||    a.ColumnName == "Feature").ToList().ForEach(a => a.IsSelected = false);
Run Code Online (Sandbox Code Playgroud)

提前致谢

Jon*_*eet 12

我已经使用以下代码来实现它并且工作正常,但有没有快速或简单的方法来实现相同的目的?

在我看来,有一种更清晰的方法来实现它 - 只是不要使用lambdas等:

foreach (var item in DisplayColumns)
{
    item.IsSelected = item.ColumnName != "Bug" && item.ColumnName != "Feature";
}
Run Code Online (Sandbox Code Playgroud)

您可以一次性做出决定 - false如果列名称是"bug"或"feature"; 这是true其他.当您想要使用集合中的每个项目执行某些代码时,C#语言具有非常好的循环结构时,您不需要调用ToList和使用.ForEachforeach

我喜欢LINQ - 这太棒了 - 但它的最佳点是查询(因此是Q)而不是操纵.在这种情况下,只有ToList部分甚至是LINQ的一部分 - List<T>.ForEach在LINQ之前在.NET 2.0中引入.


Eri*_*ric 6

当然,您可以立即分配IsSelected.

DisplayColumns.ToList().ForEach(a => a.IsSelected = !(a.ColumnName == "Bug" || a.ColumnName == "Feature"));
Run Code Online (Sandbox Code Playgroud)