更改List <T>中的某个值
我有一些列表(其中T是一个自定义类,而类有一些属性)。 我想知道如何通过使用Lambda表达式来更改其中的一个或多个值,因此结果将与foreach循环中的相同:
注意:列表中包含多个项目(多行)
        foreach (MyClass mc in list)  
        {
            if (mc.Name == "height")
                mc.Value = 30;
        }
这是linq查询(使用Lambda表达式),但它与上面的foreach循环不一样,它只返回列表中的1个项目(一行)!
我想要的是,它返回所有的项目(所有行),并只用chnages适当的一个(在WHERE扩展方法中指定的项目)。
list = list.Where(w => w.Name == "height").Select(s => { s.Value = 30; return s; }).ToList();
注意:这两个例子是不一样的! 我再说一遍,linq只返回1个项目(一行),这是我不想要的,我需要从列表中的所有项目(如foreach循环,它只做变化,但它不会删除任何项目)。
您可以使用ForEach ,但必须先将IEnumerable<T>转换为List<T> 。 
list.Where(w => w.Name == "height").ToList().ForEach(s => s.Value = 30);
我可能会用这个(我知道它不是纯粹的linq),如果你想保留所有的项目,请保留对原始列表的引用,并且你应该找到更新后的值:
 foreach (var mc in list.Where(x => x.Name == "height"))  
     mc.Value = 30;
  您可以使用带有语句lambda的投影,但原始的foreach循环更具可读性,并且正在编辑列表,而不是创建新列表。 
var result = list.Select(i => 
   { 
      if (i.Name == "height") i.Value = 30;
      return i; 
   }).ToList();
扩展方法
public static void SetHeights(this IEnumerable<MyClass> source, int value)
{
    foreach (var item in source)
    {
       if (item.Name == "height")
       {
           item.Value = value;
       }
       yield return item;
    } 
}
var result = list.SetHeights(30).ToList();
