C# 智能 If 语句
本文关键字:语句 If 智能 | 更新日期: 2023-09-27 17:55:23
有没有办法以更短更智能的方式重写这些语句?请注意,检查 var 是否为 null 很重要,因为我想避免异常。
C#:
if(var ==n ull)
{
return 0;
}
if(var.ToString() == "A")
{
return 1;
}
else if(var.ToString() == "B")
{
return 2;
}
else
{
return 0;
}
您可以使用三元运算符和 null 条件运算符:
return var?.ToString() == "A" ? 1 : 0;
空条件运算符 (?.
) 如果null
则返回 null
,如果var
var
未null
则返回 var.ToString()
。
由于null
不等于"A"
,三元运算符返回:
-
0
var
是否null
或var.ToString()
未"A"
和 -
1
如果var
不是null
,var.ToString()
是"A"
.
以防万一您不能使用 C#6(它提供空条件运算符):
return var != null && var.ToString() == "A" ? 1 : 0;
除了 Rene Vogt 的答案之外,您还可以将switch
语句与 null 条件运算符结合使用。它使代码更具可读性:
switch (var?.ToString())
{
case "A":
return 1;
case "B":
return 2;
default:
return 0;
}
我想这是
个人喜好的问题,但这对我来说似乎是一个相当复杂的条件,最好让它更干净、更容易理解。
首先,让我们重写条件以更容易理解它们:
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# 中的保留关键字,因此发布的代码实际上不会编译。
三元运算符解决方案的可能替代方案:
if(var != null && var.ToString() == "A") {
return 1;
}
else {
return 0;
}