c# - 使用空合并运算符的独特方式

标签 c# coding-style null conditional-operator null-coalescing-operator

<分区>

我知道使用 null coalescing operator 的标准方法在 C# 中是设置默认值。

string nobody = null;
string somebody = "Bob Saget";
string anybody = "";

anybody = nobody   ?? "Mr. T"; // Returns Mr. T
anybody = somebody ?? "Mr. T"; // Returns "Bob Saget"

但是 ?? 还能用来做什么呢?它似乎不如 ternary operator 有用, 除了比以下更简洁和更容易阅读:

nobody = null;
anybody = nobody == null ? "Bob Saget" : nobody; // Returns Bob Saget

鉴于甚至很少有人知道空合并运算符...

  • 您是否将 ?? 用于其他用途?

  • ?? 是必需的,还是您应该只使用三元运算符(即 大多数人都熟悉)

最佳答案

嗯,首先,它比标准的三元运算符更容易链接起来:

string anybody = parm1 ?? localDefault ?? globalDefault;

对比

string anyboby = (parm1 != null) ? parm1
               : ((localDefault != null) ? localDefault
               : globalDefault);

如果可能为 null 的对象不是变量,它也能很好地工作:

string anybody = Parameters["Name"]
              ?? Settings["Name"]
              ?? GlobalSetting["Name"];

对比

string anybody = (Parameters["Name"] != null ? Parameters["Name"]
                 : (Settings["Name"] != null) ? Settings["Name"]
                 :  GlobalSetting["Name"];

关于c# - 使用空合并运算符的独特方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/278703/

相关文章:

javascript - flatpickr 配置 - 如何为新记录设置今天日期的默认日期,但在更新现有记录时保留存储的值

c# - Silverlight AutoCompleteBox 大写输入

c# - 用户控制事件

c# - 如何在 C# 的控制台应用程序中设置鼠标光标的位置?

java - 我应该如何处理第三方输入/输出流?

sql-server - SQL 检查变量中的空值

c# - "Activity Pointer"CRM 2011 中不允许创建/更新方法

python - Python中的长导入

coding-style - 我可以在 Haskell 中避免 "rightward drift"吗?

java - Eclipse null 分析对类文字发出 null 类型安全警告