使用Throw Expression附加事件

时间:2017-05-21 16:06:06

标签: c#

我正在进入C#7,但我的第一个Throw Expression无法编译。这有什么问题?

view.SelectionChanged +=
    something == true
        ? OnSelectionChanged
        : throw new InvalidOperationException();

编译器错误是:

  

无法确定条件表达式的类型,因为“方法组”和“

之间没有隐式转换

2 个答案:

答案 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表达式的较低版本也会产生相同的错误。

<== Fiddle Me ==>

答案 1 :(得分:0)

throw new InvalidOperationException()替换为

(sender,args)=>{throw new InvalidOperationException()}

或者用这种方式用c#7打开建筑物: 转到项目属性 - &gt; 构建 - &gt; 高级 - &gt; 语言版本设置为c#7.0 enter image description here