代码之家  ›  专栏  ›  技术社区  ›  Willy David Jr

检查null是否返回错误,但不返回变量声明

  •  0
  • Willy David Jr  · 技术社区  · 8 年前

    我有个奇怪的错误。

    在这段代码中,我可以查询数据库,将其作为DataTable返回,并显式声明它为空。现在我有一个条件来检查它是否为空并将其传递给一个字符串变量。一切正常。我收到一个空字符串。未发现异常。

    DataTable dtDateUploaded = _BL.GetRecordByDataTableResults();
    dtDateUploaded = null;
    string strUploadedDate = dtDateUploaded == null ? string.Empty :
                                            dtDateUploaded.Rows[0].IsNull(0) ? string.Empty :
                                            dtDateUploaded.Rows[0][0].ToString();
    

    但是,当我使用相同的条件并将其直接传递给标签控件(例如,不使用字符串变量)时,会得到一个对象引用错误。我想知道,如果我在上面的字符串变量上使用相同的代码,为什么会出现对象引用错误?

    LblRecordCount.Text = "Record Uploaded last: " + dtDateUploaded == null ? string.Empty :
                                            dtDateUploaded.Rows[0].IsNull(0) ? string.Empty :
                                            dtDateUploaded.Rows[0][0].ToString();
    

    奇怪的是这样做:

    LblRecordCount.Text = "Record Uploaded last: " + strUploadedDate; 
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Steve    8 年前

    您得到这个错误是因为,在第二个示例中 + == 运算符,以便尝试将“Record Uploaded last”字符串连接到空变量。

    相反,在第一个示例中,=运算符的优先级低于==运算符,并且不会发生错误,因为三元运算符是在赋值之前求值的。

    应该使用括号将三元运算符逻辑组合在一起

    LblRecordCount.Text = "Record Uploaded last: " + (dtDateUploaded == null ? string.Empty :
                                            dtDateUploaded.Rows[0].IsNull(0) ? string.Empty :
                                            dtDateUploaded.Rows[0][0].ToString());
    

    C# Operators