【问题标题】:DataTable checking if null returns an error but not on variable declarationDataTable 检查 null 是否返回错误但不是变量声明
【发布时间】:2019-01-23 16:33:56
【问题描述】:

我遇到了这个奇怪的错误。

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

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

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

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; 

【问题讨论】:

    标签: c# asp.net datatable webforms


    【解决方案1】:

    您会收到此错误,因为在第二个示例中,+ 运算符优先于 == 运算符,因此您试图将“记录上传的最后”字符串连接到一个空变量。

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

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

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

    请参阅 C# Operators 上的 MSDN

    【讨论】:

      猜你喜欢
      • 2022-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      相关资源
      最近更新 更多