始终调用.
运算符的扩展方法,即使object为null而不抛出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");
}
}
为什么在这种情况下不调用扩展方法?这是一个ambiguos功能?
答案 0 :(得分:15)
你的表达是一个使用的.b() ?。运算符转换为等效:
if(a != null)
{
a.b();
}
所以这就是为什么你的方法不被调用的原因。