c# - a = (x == null) 的最佳语法?空 : x. 函数()

标签 c# syntax

这里的基本问题 - 我有很多行代码看起来像这样:

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);

其中 Foosome_long_expression 的类型。

不过我认为我不会这样做。我只使用两行版本。它更简单、更不聪明——虽然“聪明”对于 Stack Overflow 来说很有趣,但对于实际代码来说通常不是一个好主意。

关于c# - a = (x == null) 的最佳语法?空 : x. 函数(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267554/

相关文章:

php - MYSQL连接查询语法

php - 为什么这个语法有效?

C 语义 : "col -= size--" having++ or -- operating in an expression

objective-c - IOS 设置属性语法问题

c# - 动态对象的特殊字符?

C#/WPF - 获取 ScrollViewer 滚动位置?

javascript - 自动执行匿名 JavaScript 函数的括号位置?

c# - protobuf-net 中的 prepareserializer 有什么作用?

c# - 如何在 ASP.NET 中递归查找控件

c# - 如何在组合框中显示枚举值?