C# 6 方法失败的空条件运算符
C# 6 Null Conditional Operator for Method Fails
以下 (C# Interactive) 编译但爆炸了。不确定我错过了什么...
class Test { public Func<object> GetSomething = null; }
var t = new Test();
var result = t?.GetSomething();
当然有!
根据您的代码,t
不是 null
,因此 ?.
是多余的。
但是 t.GetSomething
不是。这就是抛出 NullReferenceException
.
的原因
你要找的是这个:
var result = t.GetSomething?.Invoke();
要了解新的 C# 6 功能是如何实现的,请查看 my article。
我认为您误解了该运算符的工作方式。
var result = t?.GetSomething();
此处 t?.
表示“如果 t
为空,就在此处停止,return 为空;否则,取消引用 t
并检索成员 GetSomething
。
现在,您没有检查 GetSomething
上的任何内容。相反,你可以这样做:
var result = t?.GetSomething?.Invoke();
以下 (C# Interactive) 编译但爆炸了。不确定我错过了什么...
class Test { public Func<object> GetSomething = null; }
var t = new Test();
var result = t?.GetSomething();
当然有!
根据您的代码,t
不是 null
,因此 ?.
是多余的。
但是 t.GetSomething
不是。这就是抛出 NullReferenceException
.
你要找的是这个:
var result = t.GetSomething?.Invoke();
要了解新的 C# 6 功能是如何实现的,请查看 my article。
我认为您误解了该运算符的工作方式。
var result = t?.GetSomething();
此处 t?.
表示“如果 t
为空,就在此处停止,return 为空;否则,取消引用 t
并检索成员 GetSomething
。
现在,您没有检查 GetSomething
上的任何内容。相反,你可以这样做:
var result = t?.GetSomething?.Invoke();