接线员?和扩展方法

时间:2015-12-30 10:11:04

标签: c# c#-6.0

始终调用.运算符的扩展方法,即使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功能?

1 个答案:

答案 0 :(得分:15)

你的表达是一个使用的.b() ?。运算符转换为等效:

if(a != null)
{
  a.b();
}

所以这就是为什么你的方法不被调用的原因。