棘手的if语句

时间:2012-03-22 10:48:33

标签: c# if-statement refactoring

是否可以将此if语句转换为单行语句?

        if (value != DBNull.Value)
        {
            dic.Add(columnName);
        }
        else if (!skipNullValues)
        {
            dic.Add(columnName);    
        }

4 个答案:

答案 0 :(得分:8)

if (value != DBNull.Value || !skipNullValues) dic.Add(columnName);

答案 1 :(得分:2)

使用逻辑OR:

if (value != DBNull.Value || !skipNullValues)
   dic.Add(columnName);

为了清晰起见,我会在新行上保留添加内容,但是对于这样的简单语句,你可能会放弃大括号。如果你试图在将来添加更多逻辑,你需要小心,尽管显然在if的分支中。

答案 2 :(得分:1)

if (!(value == DBNull.Value && skipNullValues))
    dic.Add(columnName);

答案 3 :(得分:0)

如果您进行编辑以包含为什么将其设为单行将有助于您获得更合适的答案。您可以采取以下几种不同的方法..

首先,按照您的要求单行:

if ((value != DBNull.Value) || (value == DBNull.Value && !skipNullValues)) { dic.Add(columnName); }

或者,如果您需要更紧凑的东西,您可能需要考虑使用三元运算符。

var result = (istrue) ? (return valIfTrue) : (return valIfFalse);

有关三元运算符的更多信息: http://msdn.microsoft.com/en-us/library/ty67wk28%28v=vs.80%29.aspx

最有可能(取决于您的情况),您应该考虑创建一个类似于此的方法:

public void AddColumnToDic(object value, string columnName) 
    bool skipNullValues = false; // todo: read from configuration
    if ((value != DBNull.Value) || (value == DBNull.Value && !skipNullValues))
    {
        dic.Add(columnName);
    }
}

并简单地为您遇到的每个单元格值调用它。