C#Smart If Statement

时间:2016-07-05 13:01:27

标签: c# if-statement

有没有办法在更短更智能的方式中重写这些语句? 请注意,检查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;
}

4 个答案:

答案 0 :(得分:20)

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

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

如果?.null,则空条件运算符(var)返回null,如果var.ToString()不是var则返回null }。

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

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