C#中的双重问题#

时间:2009-10-23 11:36:41

标签: c# if-statement

我经常发现自己编写类似的代码,如下例所示:

if (object["Object Name"] != null) {
    if (object["Object Name"] == "Some Value") {
        // Do Statement A
    } else {
        // Do Statement B
    }
} else {
    // Do Statement B
}

这里的问题是我要检查对象是否为空,然后我可以检查它的实际内容。

“语句B”始终相同,在我的情况下通常是SQL语句。

必须有更好的解决方法吗?

感谢
斯蒂芬

5 个答案:

答案 0 :(得分:23)

C#中存在短路,因此您可以这样做:

if(null != object && object.name == foo)
  do A
else
  do B

C#始终首先计算条件语句中的第一个表达式,如果失败,则不会在语句的该部分中尝试任何其他表达式。

为了进一步说明这一点,如果您要在条件语句中进行昂贵的操作以及一个或多个廉价操作,最好尽可能将其放在最后,因此它只会检查昂贵的操作。真的需要。像

这样的东西
if(trivial comparison && trivial comparison && REALLY EXPENSIVE OPERATION)

现在它只会作为最后的手段执行昂贵的操作。

答案 1 :(得分:1)

由于C#短路,是的。试试这个:

if (object["Object Name"] != null && object["Object Name"] == "Some Value") 
{
    // Do Statement A
} 
else 
{
    // Do Statement B
}

答案 2 :(得分:1)

我认为重写if-then-else会使它看起来更好,因为单个B语句。

if ((object["Object Name"] != null) && (object["Object Name"] == "Some Value")) 
{
    // Do Statement A
} 
else 
{
    // Do Statement B
}

答案 3 :(得分:1)

为什么要仔细检查?当然这就足够了:

if(object["Object Name"] == "Some Value") {
    // Do statement A
} else {
    // Do statement B
}

我看到你在使用null检查时会得到什么,但你提供的特定示例并不需要它。

编辑:现在,如果你已经写了这个

if (object != null) {
    if (object["Object Name"] == "Some Value") {
        // Do Statement A
    } else {
        // Do Statement B
    }
} else {
    // Do Statement B
}

然后解决方案是:

if(object != null && object["Object Name"] == "Some Value") {
    // Do Statement A
} else {
    // Do Statement B
}

答案 4 :(得分:0)

免责声明:不做一般的短路方法。

好吧,您可以创建一个单独的函数来执行查找,尤其是在查询保持不变的情况下。所以像这样:(伪代码传入)

private bool IsNullCheck(string objectName)
{
  if (object["Object Name"] != null)
     return false;
  else
     // statement B
}

if (!IsNullCheck("Object Name") && if(object["Object name"] == "Value") {
   // stuffs

} 
else 
{
        // Do Statement B
}

等等。