c# - 使用 Throw Expression 附加事件

标签 c#

我正在逐步过渡到 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 表达式 的较低版本也会产生相同的错误。

<== Fiddle Me ==>

关于c# - 使用 Throw Expression 附加事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098990/

相关文章:

c# - 解析 "DateTime.Now"?

c# - LINQ 选择格式化值作为列表

c# - 如何模拟任务<>结果?

c# - 如何打开给定尺寸的chrome浏览器

c# - 将结构编码到非托管数组

c# - 如何使用日期范围从 Redis (pub/sub) 保存和检索 channel 数据?

c# - 连续查找5个相同颜色的元素

c# - 如何使用 System.Runtime.Serialization.Json 解析这个字符串?

c# - 数组是否对可编程图形管道的顶点元素数据有效?

c# - 形状上的均匀分布算法