使用LINQ / Delegates,如何初始化属性属于类型列表的Object的所有成员?

时间:2014-04-16 00:07:45

标签: c# linq class foreach delegates

这是情景:

//MyClass in a collection which makes MyObjects a list.
MyObjects = new ObservableCollection<MyClass>();

在这种情况下,如果MyClass有一个名为Arm的属性,那么,如何在不迭代它们的情况下初始化Arm所有成员的MyObjects属性在Foreach循环中,如:

foreach (var MyObject in MyObjects)
{
    MyObject.Arm = "Manly"; 
}

我认为下面的代码是可能的,但没有

MyObjects.Select().Arm = "Manly";

1 个答案:

答案 0 :(得分:2)

LINQ特别没有&#34; mutate all&#34;方法,因为它试图成为一种功能。如果您绝对必须拥有此权限,则可以定义自己的ForEach扩展方法,该方法需要Action并在所有项目上运行。

public static void ForEachAbomination<T>(this IEnumerable<T> source, Action<T> action) {
    foreach (T item in source)
        action(item);
}

这允许你做

someObjects.ForEachAbomination(i => { i.Arm = "Manly"; });

但说实话,我认为foreach如果你发生变异,会更具可读性。