列表<t> .Find(Predicates / Lambda)</t>

时间:2013-11-19 12:50:22

标签: c# lambda predicate

有人能告诉我以下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和谓词(我怀疑它与答案有某种关系),但我不能把它们放在一起。任何启蒙都会受到赞赏!

由于 大卫

2 个答案:

答案 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:)

相关问题