通常,使用条件运算符时,语法如下:
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)