Tom*_*m C 0 c# if-statement null-coalescing-operator
我很好奇这段代码是否:
//value is an object, maybe null, maybe not
if (value == null)
item.PassageStimuliTitle = "";
else
item.PassageStimuliTitle = value.ToString().Trim();
Run Code Online (Sandbox Code Playgroud)
相当于这一行:
item.PassageStimuliTitle = (string)(value ?? value.ToString().Trim());
Run Code Online (Sandbox Code Playgroud)
我已经使用 if...else... 很长时间了,但最近在 C# 中遇到了空合并运算符。我用它来防止方法调用中传递的参数出现空异常错误。我认为在上面的示例中使用它是等效的,并将代码从 4 行压缩为 1 行。感谢您的阅读。很想听到反馈。
我希望这两个例子是等效的,但很好奇是否有我遗漏的东西。
不,空合并运算符表达式编写不正确。a ?? b意思是“b如果a为空则求值,否则求值a”。因此,您使用 null 合并运算符将始终生成NullReferenceExceptionif valueis null - 您的代码将尝试评估value.ToString()何时value为 null。
您的使用??将转化为类似以下 if 语句,我认为您会同意这是非常荒谬的:
if (value == null) {
item.PassageStimuliTitle = (string)value.ToString().Trim();
} else {
item.PassageStimuliTitle = (string)value;
}
Run Code Online (Sandbox Code Playgroud)
在某些假设下,if 语句可以重写为:
item.PassageStimuliTitle = value?.ToString().Trim() ?? "";
Run Code Online (Sandbox Code Playgroud)
这使用了null 条件运算符?.。如果value为 null,则整个value?.ToString().Trim()表达式为 null,因此计算 的 RHS ??。否则,.ToString().Trim()将被调用value。