如何创建使用lambda表达式的扩展方法

时间:2011-04-06 07:02:38

标签: c# lambda extension-methods

问候,

我正在寻找转换方式

foreach (var sEvent in Events)
{
    sEvent.SomeId = 0;
}

Events.Set(m=>m.SomeId, 0); 

或类似的东西。

所以基本上我想把它设为一行,将所有“SomeId”设置为0;

有什么办法吗?

4 个答案:

答案 0 :(得分:6)

如果EventsList<T>,您可以使用:

Events.ForEach( m => m.SomeId = 0 );

如果EventsIEnumerable,则ForEach未实现,但您当然可以自己创建自己的ForEach IEnumerableForEach未创建IEnumerable的原因是they did not want to have extension method on IEnumerable with side effects(改变了原始集合)。

在IEnumerable上实现ForEach非常简单:

public static IEnumerable<T> ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
  foreach (T element in source) 
    action(element);
  return source;
}

这必须像所有其他扩展方法一样进入static类。

答案 1 :(得分:2)

你可以这样做

Events.ToList().ForEach(Event => Event.SomeId = 0);

答案 2 :(得分:2)

如果EventsList<T>,您只需使用

即可
Events.ForEach(e => e.SomeId = 0);

答案 3 :(得分:1)

如果事件是列表,您可以这样做:

Events.ForEach(m => m.SomeId = 0);