我正在逐步过渡到 C# 7,但我的第一个 Throw 表达式无法编译。这有什么问题吗?
view.SelectionChanged +=
something == true
? OnSelectionChanged
: throw new InvalidOperationException();
编译错误是:
Type of conditional expression cannot be determined because there is no implicit conversion between 'method group' and ''
最佳答案
这将不起作用,因为未指定方法组的签名。 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 表达式 的较低版本也会产生相同的错误。
关于c# - 使用 Throw Expression 附加事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098990/