如何将委托表达式更改为lambda?

时间:2014-03-18 15:55:26

标签: c# lambda delegates

我正在阅读一些代码并看到以下内容:

Method.Find(delegate(Department depts) { 
     return depts.Id == _departmentId; });

T Find方法有以下描述:

public T Find(Predicate<T> match);
// Summary:
//     Searches for an element that matches the conditions defined by the specified
//     predicate, and returns the first occurrence within the entire 
//     System.Collections.Generic.List<T>.
//
// Parameters:
//   match:
//     The System.Predicate<T> delegate that defines the conditions of the element
//     to search for.
// (...)

是否可以重写此方法以将lambda表达式作为参数,如果是,如何?

2 个答案:

答案 0 :(得分:5)

如果要将lambda表达式传递给它,已经接受lambda表达式。

该方法只是表明它接受委托。有几种方法可以定义委托:

  1. 一个lambda(Find(a => true)
  2. 匿名代表(您在示例中使用的内容)
  3. 方法组Find(someNamedMethod)
  4. 反思(Find((Predicate<Whatever>)Delegate.CreateDelegate(typeof(SomeClass), someMethodInfo))

答案 1 :(得分:1)

无需重新编写方法,您可以使用lambda,如下所示:

Method.Find(x => x.Id == _departmentId );

您提供的代码是匿名代表

Method.Find(delegate(Department depts) { 
 return depts.Id == _departmentId; });

lambda是一个匿名函数。