有人能告诉我以下3个查找选项之间的差异/优势:
List<Employee> Employees = new List<Employee>();
Employee tmp = new Employee();
tmp.FirstName = "Randy";
tmp.LastName = "Jones";
Employees.Add(tmp);
tmp.FirstName = "David";
tmp.LastName = "Smith";
Employees.Add(tmp);
tmp.FirstName = "Michele";
tmp.LastName = "Morris";
Employees.Add(tmp);
// Find option 1
Employee eFound1= Employees.Find((Employee emp1) => {return emp1.LastName == "Jones";});
// Find option 2
Employee eFound2 = Employees.Find(emp2 => emp2.LastName == "Smith");
// Find option 3
Employee eFound3 = Employees.Find(
delegate(Employee emp3)
{
return emp3.LastName == "Morris";
}
);
我一直在读关于lambdas和谓词(我怀疑它与答案有某种关系),但我不能把它们放在一起。任何启蒙都会受到赞赏!
由于 大卫
答案 0 :(得分:6)
第一个是statement lambda,第二个是lambda expression,第三个是anonymous method。
它们在功能上都是等价的。
答案 1 :(得分:1)
谓词是方法的委托。在我们的下一个例子中,一个接受一个int,然后返回一个bool。 这就是谓词的样子:
var numbers = Enumerable.Range(1,10);
var predicate = new Predicate<int>(pairNumber);
var pair_numbers = list.FindAll(predicate);
然后你会在某个地方调用这个方法:
bool pairNumber(int arg)
{
return (arg % 2 == 0);
}
与lambdas实现相同,会更短,并且看起来像这样:
var numbers = Enumerable.Range(1,10);
var pair_values = list.FindAll(val => val % 2 == 0);
省去了使用方法创建谓词的需要。
如果这是一个复杂的操作,我更喜欢一种方法,所以我可以看到会发生什么并使用它。 如果这很简单,那就是lambda:)