【发布时间】:2017-05-10 12:59:45
【问题描述】:
这段代码不容易阅读,很抱歉,但出于我的兴趣,为什么编译器必须知道 lambda 的类型。让我们看看代码,不用担心,这不是真正的代码。
bool b1 = true, b2, b3;
Action action = () => Console.WriteLine("Hello");
(b1 ? () =>
{
b2 = true;
b3 = false;
} : action)();
这行得通。但是……
为什么我不能这样做?
bool b1 = true, b2, b3;
(b1 ? () =>
{
b2 = true;
b3 = false;
} : () => Console.WriteLine("Hello"))();
您能否解释一下,在哪些情况下编译器必须知道函数的显式类型(在这种情况下为Action)?
VS2017 告诉我......
CS0173 无法确定条件表达式的类型,因为 'lambda 表达式'和之间没有隐式转换 'lambda 表达式'
【问题讨论】:
-
结果是什么?如果是编译器错误,您应该提及它
-
我错了还是
()=>{}也可以是Func<>? (我认为可能是什么原因)