通过Lambda表达式分配值?

时间:2011-12-17 12:33:01

标签: c# .net lambda

我知道以下引用:

  

原因是lambda表达式可以转换为委托类型或表达式树 - 但它必须知道哪个委托类型。只知道签名是不够的。

麻烦的是我仍然坚持如何解决我的问题。

有人可以判断以下是否可能?

bool isStaff = () => { return selectedPerson.PersonType == "Staff"; };

错误:

  

无法将lambda表达式转换为类型'bool',因为它不是委托类型

我理解错误,但我真的想知道如何解决这个问题,因为我已多次反复出现这个错误,并且就价值分配而言,根本没有学会如何正确使用lamda表达式。

感谢快速回复fellas:

IMO,下面的内容很棒:

bool isStaff = (selectedPerson, bool) => { return selectedPerson.PersonType == "Staff"; };

大声笑,我觉得这不行,但在行代码中很漂亮,对我来说看起来很棒,我的期望。下面的答案似乎暗示其他lol!

3 个答案:

答案 0 :(得分:6)

bool isStaff = selectedPerson.PersonType == "Staff";

Func<Person, bool> isStaffDelegate = selectedPerson => 
                                         selectedPerson.PersonType == "Staff"; 
bool isStaff = isStaffDelegate(selectedPerson); 

答案 1 :(得分:5)

问题是lambda在评估时返回bool,但它本身不是bool

您可以执行以下操作:

Func<bool> func = () => { return selectedPerson.PersonType == "Staff"; };
bool isStaff = func();

这会将lambda分配给一个变量,然后可以使用该变量来调用lambda,并返回所需的bool值。

答案 2 :(得分:2)

正如编译器所说,您需要分配给委托或表达式树类型。例如:

Func<bool> isStaff = () => selectedPerson.PersonType == "Staff";

现在你还没有解释你真正想要做什么,或者selectedPerson是什么。以上将捕获 selectedPerson变量 - 但根据the_ajp的回答,您可能实际想要Func<Person, bool>