gpt4 book ai didi

c# - 如何使用条件三元运算符在 lambda 之间有条件地分配 Func<>?

转载 作者:IT王子 更新时间:2023-10-29 03:53:19 24 4
gpt4 key购买 nike

通常,在使用条件运算符时,语法如下:

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;

这是相同的语法,应该有效吗?正确的?出于某种原因,事实并非如此。编译器给出了这个很好的神秘信息:

Error 1 Type of conditional expression cannot be determined because there is no implicit conversion between 'lambda expression' and 'lambda expression'

然后我继续更改语法,这样它确实起作用了:

Func<Order, bool> predicate = id == null
? predicate = p => p.EmployeeID == null
: predicate = p => p.EmployeeID == id;

我很好奇为什么第一种方式不起作用?

(旁注:我最终不需要此代码,因为我发现在将 int 值与 null 进行比较时,您只需使用 object.Equals)

最佳答案

您可以将 lambda 表达式转换为特定的目标委托(delegate)类型,但为了确定条件表达式的类型,编译器需要知道每个第二个和第三个操作数的类型。虽然它们都只是“lambda 表达式”,但没有从一个到另一个的转换,因此编译器不能做任何有用的事情。

我不建议使用赋值,但是 - 转换更明显:

Func<Order, bool> predicate = id == null 
? (Func<Order, bool>) (p => p.EmployeeID == null)
: p => p.EmployeeID == id;

请注意,您只需为一个操作数提供它,这样编译器就可以从另一个 lambda 表达式执行转换。

关于c# - 如何使用条件三元运算符在 lambda 之间有条件地分配 Func<>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/263151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com