有没有办法在C#中对属性执行某种null合并?

Ada*_*lin 3 c# syntax null-coalescing-operator

我不太确定如何表达这个问题,但场景如下:

说我有以下课程:

public class SampleClass
{
    public int Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我知道你可以null合并包含类:

SampleClass newSampleClass = possibleNullSampleClass ?? notNullSampleClass;
Run Code Online (Sandbox Code Playgroud)

有没有办法在属性上执行一种null合并,所以我不必这样做:

int? num = sampleClass != null ? new int?(sampleClass.Number) : 5;
Run Code Online (Sandbox Code Playgroud)

看起来像???运算符之类的东西执行此检查是非常有用的,所以我可以这样做:

int? num = sampleClass.Number ??? 5;
Run Code Online (Sandbox Code Playgroud)

在C#中有可能是这样的吗?

tak*_*gen 5

目前没有这样的运营商.但在C#6中,"安全导航"操作符将出现,您将能够编写

int number = sampleClass?.Number;
Run Code Online (Sandbox Code Playgroud)

即使sampleClass等于,此代码也不会因NullRef而失败null.现在,您可以使用以下扩展方法从对象中提取值并封装null-check:

public static TResult Maybe<TSource, TResult>(
    this TSource source, Func<TSource, TResult> produceResult, Func<TResult> produceDefault)
    where TSource : class
{
    return source == null ? produceDefault() : produceResult(source);
}
Run Code Online (Sandbox Code Playgroud)

并按如下方式使用:

int numberOrFive = sampleClass.Maybe(c => c.Number, () => 5);
Run Code Online (Sandbox Code Playgroud)