我正在进入C#7,但我的第一个Throw Expression无法编译。这有什么问题?
view.SelectionChanged +=
something == true
? OnSelectionChanged
: throw new InvalidOperationException();
编译器错误是:
无法确定条件表达式的类型,因为“方法组”和“
之间没有隐式转换
答案 0 :(得分:1)
这不起作用,因为未指定方法组的签名。 OnAction
用作方法组。 OnAction
的类型是"方法组"并且可能存在OnAction
的多个重载,因此编译器无法推断它:
public void M()
{
var item = Console.Read();
Func<object, object> ok = OnAction; // will work
Func<object, object> handler =
item == 1 ? OnAction : throw new Exception(); // will not work
}
public static Object OnAction(object y)
{
return "";
}
要修复它,我们需要做的就是指定方法组的签名,以便编译器准确知道哪一个:
Func<object, object> handler =
item == 1 ? (Func<object, object>)OnAction : throw new Exception();
因此,为了解决您的问题,我不确定SelectionChanged
是什么,但您需要提供其签名,这样才能解决问题。
请注意,此错误并非特定于C#7.0。即使没有 throw表达式的较低版本也会产生相同的错误。
答案 1 :(得分:0)