Null 条件运算符可以与扩展方法一起使用

扩展方法可以处理空引用 ,但无论如何都可以使用 ?. 进行空值检查。

public class Person 
{
    public string Name {get; set;}
}

public static class PersonExtensions
{
    public static int GetNameLength(this Person person)
    {
        return person == null ? -1 : person.Name.Length;
    }
}

通常,该方法将被触发 null 引用,并返回 -1:

Person person = null;
int nameLength = person.GetNameLength(); // returns -1

使用 ?. 时,null 引用不会触发该方法,类型为 int?

Person person = null;
int? nameLength = person?.GetNameLength(); // nameLength is null.

这种行为实际上是从 ?. 运算符的工作方式中预期的:它将避免对 null 实例进行实例方法调用,以避免 NullReferenceExceptions。但是,相同的逻辑适用于扩展方法,尽管声明方法的方式不同。

有关在第一个示例中调用扩展方法的原因的更多信息,请参阅扩展方法 - 空检查文档。