狡猾的if语句

本文关键字:语句 if | 更新日期: 2023-09-27 18:28:43

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

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

狡猾的if语句

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

使用逻辑OR:

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

为了清晰起见,我会将添加内容保留在新行中,尽管对于这样一个简单的语句,您可能可以去掉花括号。如果您试图在未来添加更多的逻辑,尽管显然是在if的分支中,但您确实需要小心。

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

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

首先,按照您的要求,在一行中:

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

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