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#中有可能是这样的吗?
目前没有这样的运营商.但在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)
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |