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

单例:

return _staticField = _staticField ?? new SingletonConstructor();

和一个链式:
notNullableResult = nullable1 ?? nullable2 ?? nullable3 ?? default(someType);

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

但是,不幸的是,这就是全部。有时它需要扩展或改变。有时当我看到一个特定的案例时我会使用它们 - 而且我总是犹豫是否使用它,因为我不知道是否有其他程序员真的会很容易阅读它。

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

最佳答案

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

from a in DB.Table
select new {
             a.Id,
             Val = a.One ?? a.Two ??a.Three
           }

在大多数情况下,这导致数据库端的 COALSCE 使 非常干净 SQL,只是没有任何好的选择。我们正在使用 Oracle,我宁愿不阅读嵌套的 Nvl(Nvl(Nvl(Nvl(,谢谢...我将使用我的 COALSCE 并运行它。

我也将它用于这样的属性,我猜只是个人品味:
private string _str;
public string Str {
  get { return _str ?? (_str = LoaderThingyMethod()); }
}

关于c# - 常见的 C# 习语,包括 coalesce ??运算符(operator),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2330410/

10-11 06:00