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

The*_*der 2 c# lambda extension-methods

问候,

我正在寻找一种转换方式

foreach (var sEvent in Events)
{
    sEvent.SomeId = 0;
}
Run Code Online (Sandbox Code Playgroud)

Events.Set(m=>m.SomeId, 0); 
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

基本上我想把它作为一个单行事件,将所有"SomeId"设置为0;

有什么办法吗?

Øyv*_*hen 6

如果EventsList<T>你可以使用:

Events.ForEach( m => m.SomeId = 0 );
Run Code Online (Sandbox Code Playgroud)

如果EventsIEnumerable,ForEach没有实现,但你当然可以自己创建自己的ForEach IEnumerable.原因ForEach不是创建的IEnumerable,是因为他们不希望在IEnumerable副作用上使用扩展方法(这改变了原始集合).

在IEnumerable上实现ForEach很容易:

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

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