我知道以下引用:
原因是lambda表达式可以转换为委托类型或表达式树 - 但它必须知道哪个委托类型。只知道签名是不够的。
麻烦的是我仍然坚持如何解决我的问题。
有人可以判断以下是否可能?
bool isStaff = () => { return selectedPerson.PersonType == "Staff"; };
错误:
无法将lambda表达式转换为类型'bool',因为它不是委托类型
我理解错误,但我真的想知道如何解决这个问题,因为我已多次反复出现这个错误,并且就价值分配而言,根本没有学会如何正确使用lamda表达式。
感谢快速回复fellas:
IMO,下面的内容很棒:
bool isStaff = (selectedPerson, bool) => { return selectedPerson.PersonType == "Staff"; };
大声笑,我觉得这不行,但在行代码中很漂亮,对我来说看起来很棒,我的期望。下面的答案似乎暗示其他lol!
答案 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>
。