【发布时间】:2010-12-05 02:28:47
【问题描述】:
在 c# 中有一个很棒的运算符 '??'这使生活变得更加简单。我可以写foo ?? default,而不是写(foo != null)? foo : default。有没有一种简单的方法可以将此运算符应用于类成员,例如在(foo != null)? foo.bar : default的情况下?
更新:好的,我会解释一下:
string a = (someVeryLongVariableName != null)? someVeryLongVariableName : ""; // Long way
string a = someVeryLongVariableName ?? ""; // Shorter with same result
string a = (someVeryLongVariableName != null)? someVeryLongVariableName.bar : ""; // What's the shorter way in this case?
upd2:我需要这个功能的情况如下:
if (foo is MyClass) bar1 = (foo as MyClass).SpecificMember;
if (foo is OneMoreClass) bar2 = (foo as OneMoreClass).AnotherSpecificMember;
if (foo is MyFavoriteClass) bar3 = (foo as MyFavoriteClass).YetAnotherMember;
如果我能把它们缩短成类似的东西会很酷
bar1 = (foo as MyClass).SpecificMember ?? null;
也许它不会更短,但它只将 foo 转换为 MyClass 一次,并使用默认值显式初始化 bar。最重要的是它看起来更好。
【问题讨论】:
-
什么不是简单的写作 (foo != null) ? foo.bar : 默认 ??
-
什么?我不确定你能不能变得更简单......我错过了什么吗?
-
在 upd2 中,您分配了 3 个不同的变量(bar1、bar2 和 bar3)。我看不出仅将其缩短为 bar1 分配对您有何帮助。还是您打算只分配 bar1 并错误地给出了错误的示例?