【发布时间】:2016-04-04 07:12:39
【问题描述】:
始终调用带有. 运算符的扩展方法,即使对象为空而不抛出NullReferenceException。通过使用运算符?.,它永远不会被调用。例如:
using System;
public class Program
{
public static void Main()
{
A a = null;
a.b(); // works
a?.b(); // doesn't work
}
}
public class A { }
public static class ext
{
public static void b(this A a)
{
Console.WriteLine("I'm called");
}
}
为什么在这种情况下不调用扩展方法?这是一个模棱两可的功能吗?
【问题讨论】:
-
你可以在Try Roslyn看到已编译>反编译的代码
-
那么
?.操作员检查值是否为null之前 做任何事情,那么为什么它应该工作?阅读内容:stackoverflow.com/questions/847209/… 和 msdn.microsoft.com/en-us/library/dn986595.aspx -
拥有完全不使用该对象的扩展方法的实际用途是什么。
-
我不明白为什么
a.b();没有NullReferenceException? -
@Shaharyar,因为在
a上没有调用任何内容。