常见的c#成语包括合并?操作者

rud*_*nev 7 c# null-coalescing-operator

每个人都知道至少两个常见的c#习语,包括合并运算符:

单身人士:

return _staticField = _staticField ?? new SingletonConstructor();
Run Code Online (Sandbox Code Playgroud)

和一个链:

notNullableResult = nullable1 ?? nullable2 ?? nullable3 ?? default(someType);
Run Code Online (Sandbox Code Playgroud)

它可读,一致,值得在代码中使用和识别.

但不幸的是,这就是全部.有时它需要扩展或改变.有时我会在看到特定情况时使用它们 - 而且我总是犹豫使用它,因为我不知道是否有其他程序员会真正阅读它.

你认识其他人吗?我希望有更具体的用法:例如Asp.net,EF,LINQ,任何东西 - 合并不仅可以接受,而且非常显着.

Nic*_*ver 6

对我来说,它转换为SQL本身就足够了:

from a in DB.Table
select new {
             a.Id,
             Val = a.One ?? a.Two ??a.Three
           }
Run Code Online (Sandbox Code Playgroud)

这导致COALSCE数据库方面在大多数情况下使SQL 变得非常清晰,没有任何好的选择.我们正在使用Oracle,我宁愿不通过Nvl(Nvl(Nvl(Nvl(嵌套来阅读谢谢...我会接受我的COALSCE并运行它.

我也把它用于这样的属性,只是个人品味我想:

private string _str;
public string Str { 
  get { return _str ?? (_str = LoaderThingyMethod()); } 
}
Run Code Online (Sandbox Code Playgroud)