有没有办法在更短更智能的方式中重写这些语句? 请注意,检查var for null非常重要,因为我想避免例外。
C#:
if(var ==n ull)
{
return 0;
}
if(var.ToString() == "A")
{
return 1;
}
else if(var.ToString() == "B")
{
return 2;
}
else
{
return 0;
}
答案 0 :(得分:20)
您可以使用三元运算符和空条件运算符:
return var?.ToString() == "A" ? 1 : 0;
如果?.
为null
,则空条件运算符(var
)返回null
,如果var.ToString()
不是var
则返回null
}。
由于null
不等于"A"
,因此三元运算符返回:
0
如果var
为null
或var.ToString()
不是"A"
且1
如果var
不是null
且var.ToString()
是"A"
。以防您无法使用C#6(提供空条件运算符):
return var != null && var.ToString() == "A" ? 1 : 0;
答案 1 :(得分:7)
除了 Rene Vogt 的答案之外,您还可以使用switch
语句与null条件运算符相结合。它使代码更具可读性:
switch (var?.ToString())
{
case "A":
return 1;
case "B":
return 2;
default:
return 0;
}
答案 2 :(得分:4)
我想这是个人偏好的问题,但这对我来说似乎是一个相当复杂的条件,让它更清晰,更容易理解会很好。
首先,让我们重写一下条件,以便更容易理解它们:
if (var != null && var.ToString() == "A")
return 1;
else
return 0;
现在,介绍条件表达式的方法:
private bool IsBigLetterAWhenRepresentedAsString(object o) =>
o != null && o.ToString() == "A";
请注意,我使用C#6.0方法的简写语法。这很好很短,但您也可以使用标准方法:
private bool IsBigLetterAWhenRepresentedAsString(object o)
{
return o!= null && o.ToString() == "A";
}
然后在原始方法中使用此方法,如下所示:
// ... some code
return IsBigLetterAWhenRepresentedAsString(var) ? 1 : 0;
对我而言,这比return var != null && var.ToString() == "A" ? 1 : 0;
要清晰得多。它使原始方法中的代码更短,更容易理解。
另请注意,var
是C#中的保留关键字,因此发布的代码实际上不会编译。
答案 3 :(得分:3)
三元运算符解决方案的可能替代方案:
if(var != null && var.ToString() == "A") {
return 1;
}
else {
return 0;
}