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

C# 智能 If 语句

您可以使用三元运算符和 null 条件运算符:

return var?.ToString() == "A" ? 1 : 0;

空条件运算符 (?.) 如果null则返回 null,如果var varnull则返回 var.ToString()

由于null不等于"A",三元运算符返回:

  • 0 var是否nullvar.ToString()"A"
  • 1如果var不是nullvar.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;
}