【问题标题】:Operator ?. and extension methods操作员 ?。和扩展方法
【发布时间】: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");
    }
}

为什么在这种情况下不调用扩展方法?这是一个模棱两可的功能吗?

【问题讨论】:

标签: c# c#-6.0


【解决方案1】:

您的表达式 a?.b() 使用 ?. 运算符转换为等价物:

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

所以这就是你的方法没有被调用的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多