这里的基本问题 - 我有很多行代码看起来像这样:
var a = (long_expression == null) ? null : long_expression.Method();
类似的行在这个函数中重复了很多。 long_expression
每次都不一样。我试图找到一种避免重复long_expression
的方法,但要保持这种紧凑。类似于 operator ??
的反义词。目前,我正在考虑放弃并将其放在多行中,例如:
var temp = long_expression;
var a = (temp == null) ? null : temp.Method();
但我很好奇是否有一些我不知道的巧妙语法可以使它更简洁。
最佳答案
好吧,您可以使用这样的扩展方法:
public static TResult NullOr<TSource, TResult>(this TSource source,
Func<TSource, TResult> func) where TSource : class where TResult : class
{
return source == null ? null : func(source);
}
然后:
var a = some_long_expression.NullOr(x => x.Method());
或者(取决于您的 C# 版本)
var a = some_long_expression.NullOr(Foo.Method);
其中 Foo
是 some_long_expression
的类型。
不过我认为我不会这样做。我只使用两行版本。它更简单、更不聪明——虽然“聪明”对于 Stack Overflow 来说很有趣,但对于实际代码来说通常不是一个好主意。
关于c# - a = (x == null) 的最佳语法?空 : x. 函数(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267554/