Mic*_*Rut 9 lambda expression .net-4.0 c#-4.0
我是lambda表达式的新手,希望利用语法根据集合中的另一个值设置集合中一个属性的值
通常我会做一个循环:
class Item
{
public string Name { get; set; }
public string Value { get; set; }
}
void Run()
{
Item item1 = new Item { Name = "name1" };
Item item2 = new Item { Name = "name2" };
Item item3 = new Item { Name = "name3" };
Collection<Item> items = new Collection<Item>() { item1, item2, item3 };
// This is what I want to simplify.
for (int i = 0; i < items.Count; i++)
{
if (items[i].Name == "name2")
{
// Set the value.
items[i].Value = "value2";
}
}
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*cek 17
LINQ对于选择数据通常比修改数据更有用.但是,你可以写这样的东西:
foreach(var item in items.Where(it => it.Name == "name2"))
item.Value = "value2";
Run Code Online (Sandbox Code Playgroud)
首先选择需要修改的项目,然后使用标准命令循环修改所有项目.您可以foreach使用ForAll可用于列表的方法替换循环,但我认为这不会给您带来任何好处:
items.Where(it => it.Name == "name2").ToList()
.ForEach(it => it.Value = "value2");
Run Code Online (Sandbox Code Playgroud)
请注意,您需要ToList在中间添加,因为ForEach.NET 2.0功能仅适用于List<T>类型 - 不适用于所有IEnumerable<T>类型(与其他LINQ方法一样).如果你喜欢这种方式,可以实现ForEach为IEnuerable<T>:
public static void ForEach<T>(this IEnumerable<T> en, Action<T> f) {
foreach(var a in en) f(a);
}
// Then you can omit the `ToList` conversion in the middle
items.Where(it => it.Name == "name2")
.ForEach(it => it.Value = "value2");
Run Code Online (Sandbox Code Playgroud)
无论如何,我更喜欢foreach循环,因为这也清楚地表明你正在做一些变异 - 在代码中很容易看到这个事实.
| 归档时间: |
|
| 查看次数: |
20403 次 |
| 最近记录: |