C# 用抛出表达式附加事件
我正在轻松地使用C#7,但我的第一个抛出表达式无法编译。这个怎么了C# 用抛出表达式附加事件,c#,C#,我正在轻松地使用C#7,但我的第一个抛出表达式无法编译。这个怎么了 view.SelectionChanged += something == true ? OnSelectionChanged : throw new InvalidOperationException(); 编译器错误为: 无法确定条件表达式的类型,因为“方法组”和“”之间没有隐式转换 将新的InvalidOperationException()替换为 (sender,args)=&g
view.SelectionChanged +=
something == true
? OnSelectionChanged
: throw new InvalidOperationException();
编译器错误为:
无法确定条件表达式的类型,因为“方法组”和“”之间没有隐式转换
将新的InvalidOperationException()替换为
(sender,args)=>{throw new InvalidOperationException()}
或者通过以下方式启用“使用c#7构建”:
转到项目属性->构建->高级->语言版本设置为c#7.0
这将不起作用,因为未指定方法组的签名<代码>操作用作方法组。
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 "";
}
public void M()
{
var item=Console.Read();
Func ok=OnAction;//将起作用
Func处理程序=
item==1?OnAction:抛出新异常();//将不起作用
}
公共静态对象OnAction(对象y)
{
返回“”;
}
要修复它,我们需要做的就是指定方法组的签名,以便编译器准确地知道哪一个:
Func<object, object> handler =
item == 1 ? (Func<object, object>)OnAction : throw new Exception();
Func处理程序=
项目==1?(Func)OnAction:抛出新异常();
因此,要解决您的问题,我不确定什么是SelectionChanged
,但您需要提供其签名,这将解决问题
请注意,此错误不是C#7.0特有的。即使没有抛出表达式的较低版本也会产生相同的错误
这不是lambda。您是否已将项目的编译设置为使用c#7进行编译?@s.Petrosov不知道您的意思。我正在使用VS 2017。这将代码的含义更改为不正确的行为。该项目已设置为
默认值
,在VS 2017中为C#7。@HappyNomad,据我所知,默认值不是C#7。这很奇怪,因为我在同一项目中使用了其他C#7功能。