lambda表达式的意义是什么?

阅读本文之后,我无法弄清楚为什么使用过lambda表达式。公平地说,我认为我对什么是委托和表达式树类型没有正确的了解,但是我不明白为什么有人会使用lambda表达式而不是声明的函数。有人可以启发我吗?

回答:

第一: :

您宁愿编写,阅读和维护哪个文件?这个:

    var addresses = customers.Select(customer=>customer.Address);

要么:

static private Address GetAddress(Customer customer)

{

return customer.Address;

}

... a thousand lines later ...

var addresses = customers.Select(GetAddress);

当您可以将需要的代码作为一个简短的表达式放在您需要的 地方 时,用数百或数千个四行函数使程序混乱的意义何在?

第二:

您希望阅读,编写和维护以下内容:

var currentCity = GetCurrentCity();

var addresses = customers.Where(c=>c.City == currentCity).Select(c=>c.Address);

要么:

static private Address GetAddress(Customer customer)

{

return customer.Address;

}

private class CityGetter

{

public string currentCity;

public bool DoesCityMatch(Customer customer)

{

return customer.City == this.currentCity;

}

}

....

var currentCityGetter = new CityGetter();

currentCityGetter.currentCity = GetCurrentCity();

var addresses = customers.Where(currentCityGetter.DoesCityMatch).Select(GetAddress);

使用lambda时,所有麻烦的代码都会为您编写。

第三:

当你写:

var addresses = from customer in customers

where customer.City == currentCity

select customer.Address;

它会为您转换为lambda语法。许多人觉得此语法易于阅读,但是我们需要lambda语法才能使其真正起作用。

第四:

请注意,在上面的查询理解或lambda版本中,我们不必提供“客户”的类型,但是在将其声明为静态方法时,必须提供形式参数的类型。编译器很聪明,可以根据上下文推断lambda参数的类型。这使您的代码减少了冗余,变得更加清晰。

第五:

假设您要询问Web服务器“向我发送居住在当前城市的客户的地址”。您是否要(1)从该网站上删除一百万个客户,并在您的客户端计算机上进行过滤,或者(2)向该网站发送一个对象,告诉它“查询包含当前城市的过滤器,然后地址的选择”?让服务器来工作,并仅将匹配的结果发送给您。

表达式树允许编译器将lambda转换为可在运行时转换为另一查询格式的代码,并发送给服务器进行处理。在客户端上运行的辅助方法很少。

以上是 lambda表达式的意义是什么? 的全部内容, 来源链接: utcz.com/qa/430121.html

回到顶部