【发布时间】:2010-09-20 18:14:38
【问题描述】:
一般情况下,使用条件运算符时,语法如下:
int x = 6;
int y = x == 6 ? 5 : 9;
没什么花哨的,很直接。
现在,让我们尝试在将 Lambda 分配给 Func 类型时使用它。让我解释一下:
Func<Order, bool> predicate = id == null
? p => p.EmployeeID == null
: p => p.EmployeeID == id;
语法相同,应该有效吗?正确的?出于某种原因,没有。编译器给出了这个很好的神秘信息:
错误 1 无法确定条件表达式的类型,因为“lambda 表达式”和“lambda 表达式”之间没有隐式转换
然后我继续更改语法,这样它确实工作了:
Func<Order, bool> predicate = id == null
? predicate = p => p.EmployeeID == null
: predicate = p => p.EmployeeID == id;
我只是好奇为什么第一种方式不起作用?
(旁注:我最终不需要此代码,因为我发现在将 int 值与 null 进行比较时,您只需使用 object.Equals)
【问题讨论】:
标签: c# lambda conditional-operator