Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#智能If语句_C#_If Statement - Fatal编程技术网

C#智能If语句

C#智能If语句,c#,if-statement,C#,If Statement,有没有一种方法可以用更短更智能的方式重写这些if a语句? 请注意,检查var是否为null很重要,因为我希望避免异常 C#: 您可以使用三元运算符和空条件运算符: return var?.ToString() == "A" ? 1 : 0; return var != null && var.ToString() == "A" ? 1 : 0; 如果var为null,则null条件运算符(?。)返回null,如果var不是null,则返回var.ToString() 由于n

有没有一种方法可以用更短更智能的方式重写这些if a语句? 请注意,检查var是否为null很重要,因为我希望避免异常

C#:


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

return var?.ToString() == "A" ? 1 : 0;
return var != null && var.ToString() == "A" ? 1 : 0;
如果
var
null
,则null条件运算符(
?。
)返回
null
,如果
var
不是
null
,则返回
var.ToString()

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

  • 0
    如果
    var
    null
    var.ToString()
    不是
    “A”
  • 1
    如果
    var
    不是
    null
    并且
    var.ToString()
    “A”

以防不能使用C#6(它提供空条件运算符):


三元运算符溶液的可能替代方案:

if(var != null && var.ToString() == "A") {
    return 1;
}
else {
    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;
对我来说,这比
returnvar!=null&&var.ToString()=“A”?1 : 0;。它使原始方法中的代码更短,更容易理解

还要注意,
var
是C#中的保留关键字,因此发布的代码实际上不会编译。

除了Rene Vogt的答案之外,您还可以使用
switch
语句和null条件运算符组合使用。它使代码更具可读性:

switch (var?.ToString())
{
   case "A":
       return 1;
   case "B":
       return 2;
   default:
       return 0;
}

三元运算符处理空值情况吗?不,但空值条件运算符处理。@NewUser正如我解释的,空值条件运算符处理该情况。它返回
null
而不是
ToString()
null!=“A”
@NewUser您使用的是哪个C#版本?谢谢您的解释。奇怪的是,我只是第一次看到你的代码,然后在我询问空代码后才给出解释。建议先检查
null
,否则你可能永远无法找到第二个condition@MongZhu是的,刚刚意识到。我认为这比三元运算符+单子空值检查运算符要好。让读者更清楚。我希望它能遵循标准的C#惯例,把开头的大括号放在一条新的线上。哇。令人印象深刻的反应。例如,如果我想使用switch语句而不是if语句,怎么样。如何解释空值?向上投票,将条件封装在一个命名良好的方法中是一个非常好的主意。编辑问题使现有答案无效是不可取的;更好的办法是根据更新情况单独提问-您可以将所有“字母”值粘贴到一个数组中,并使用索引(+1)作为返回值。。。或者使用ASCII字符代码和一点数学知识-这个问题也可能有助于说明你为什么要做上述工作(为什么要这样做),因为它可能会给出更高质量的答案。请将这个问题恢复到原来的状态,并开始一个新问题,解释你在高层次上到底想要实现什么。+1,如果问题本来是这样的,我会写下来,但不会更新我的答案,因为问题可能会再次改变:)谢谢勒内。除了你出色的答案之外,我刚刚添加了一些东西。我认为需要注意的是空条件运算符?。在C#<6中不可用。
switch (var?.ToString())
{
   case "A":
       return 1;
   case "B":
       return 2;
   default:
       return 0;
}