首页 > 解决方案 > Lambdas 和条件:任何人都可以看到 C# 编译器无法解决以下问题的原因吗?

问题描述

我已经解决了许多与 C# 无法解决用于初始化 var 的条件表达式中的两个 lambda 的斗争。然而,今天我面对的似乎是一对非常简单直接的 lambda,我无法让编译器接受它作为条件表达式的两个结果。编译器使用 if-then-else 构造分别对它们没有问题。

因此,我决定将代码减少到尽可能少的程度以显示问题,并发现我可以将其减少到非常低的水平,但仍然会出现错误。

编译器发出通常的错误:

CS0173 无法确定条件表达式的类型,因为“lambda 表达式”和“lambda 表达式”之间没有隐式转换

以下代码是仍然会生成错误的非常底层代码的三个示例。第一行(test1)应该是足够合理可用的。其他方面是努力通过优先级和显式类型进行澄清。

考虑到我之前已经成功地使用条件在两个更复杂(虽然不是很复杂)的 lambdas 之间进行选择,我惊讶地发现这些极其简单的示例不起作用。

有人知道这里发生了什么吗?

在我的例子中,它是一个使用 C# 7.3 构建的 C# UWP 项目。Visual Studio 未报告任何挂起的更新。

Func<int, int> test1 = true ? (a) => 0 : (a) => 0;

Func<int, int> test2 = true ? ((int a) => (int)0) : ((int a) => (int)0);

Func<int, int> test3 = true ? ((int a) => { return (int)0; }) : ((int a) => { return (int)0; });

标签: c#lambdaconditional-operator

解决方案


推荐阅读