接线员?和扩展方法

Kon*_*ran 5 c# c#-6.0

.始终调用带有运算符的扩展方法,即使对象为空而不抛出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");
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么在这种情况下不调用扩展方法?这是一个ambiguos功能?

Mar*_*cki 15

你的表达式是?.b(),它使用 运算符转换为等效:

if(a != null)
{
  a.b();
}
Run Code Online (Sandbox Code Playgroud)

所以这就是你的方法不被调用的原因.