【问题标题】:C# 6 Null Conditional Operator for Method Fails方法失败的 C# 6 空条件运算符
【发布时间】:2016-06-08 18:08:54
【问题描述】:

以下(C# Interactive)编译但失败了。不知道我错过了什么......

class Test { public Func<object> GetSomething = null; }
var t = new Test();
var result = t?.GetSomething();

【问题讨论】:

  • “炸毁”是什么意思?
  • 运行时的 NRE;正是我没想到的 - 我希望 null 条件运算符将结果设置为 null。

标签: c# c#-6.0 null-propagation-operator


【解决方案1】:

当然可以!

根据您的代码,t 不是 null,因此 ?. 是多余的。

t.GetSomething 不是。这就是抛出 NullReferenceException 的原因。

你要找的是这个:

var result = t.GetSomething?.Invoke();

要了解新的 C# 6 功能是如何实现的,请查看my article

【讨论】:

    【解决方案2】:

    我想你误解了这个运算符的工作方式。

    var result = t?.GetSomething();
    

    这里t?. 的意思是“如果t 为null,则在此处停止并返回null;否则,取消引用t 并检索成员GetSomething

    现在,您不会在 GetSomething 上检查任何内容。相反,您可以这样做:

    var result = t?.GetSomething?.Invoke();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2017-06-24
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多