只是为了好奇/方便:C#提供了两个我知道的很酷的条件表达式功能:
string trimmed = (input == null) ? null : input.Trim();
Run Code Online (Sandbox Code Playgroud)
和
string trimmed = (input ?? "").Trim();
Run Code Online (Sandbox Code Playgroud)
对于我经常遇到的情况,我想念另一个这样的表达:
如果输入引用为null,则输出应为null.否则,输出应该是访问输入对象的方法或属性的结果.
我在第一个例子中完成了这一点,但是(input == null) ? null : input.Trim()非常冗长且难以理解.
这种情况是否有另一个条件表达式,或者我可以??优雅地使用运算符吗?
假设我想检查一堆对象以确保none为null:
if (obj != null &&
obj.Parameters != null &&
obj.Parameters.UserSettings != null) {
// do something with obj.Parameters.UserSettings
}
Run Code Online (Sandbox Code Playgroud)
编写一个辅助函数来接受可变数量的参数并简化这种检查是一个诱人的前景:
static bool NoNulls(params object[] objects) {
for (int i = 0; i < objects.Length; i++)
if (objects[i] == null) return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
然后上面的代码可能变成:
if (NoNulls(obj, obj.Parameters, obj.Parameters.UserSettings)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
对?错误.如果obj是空的话,我会得到一个NullReferenceException,当我试图通过obj.Parameters对NoNulls.
所以上述方法显然是错误的.但是if使用&&运算符的声明工作得很好,因为它是短路的.那么:有没有办法让方法短路,以便在方法中明确引用之前不会对其参数进行求值?