在 C# 中使用 return 值编写空引用的更好方法

A better way to write null reference with return value in c#

有没有更好的方法来编写这个空检查?我正在检查 DataSet 中的 table 是否为空值。

if (dataSet == null || dataSet.Tables == null || dataSet.Tables[0].Rows == null)
{
    Console.WriteLine($"Error at {nameof(dataSet)}");
    return vatPeriodList;
}

我在ADO.NET工作。

尝试

if(dataSet?.Tables?.FirstOrDefault()?.Rows == null) {}

FirstOrDefault() returns 第一个条目,如果有 none.

,则为空

你的支票没有意义,还忘记了一个重要的。

  • DataSet.Tables也不能是null,因为它是只读的属性,不能赋值null,所以第二次检查没有意义。
  • dataSet.Tables[0].Rows不能是null,因为它是只读的属性,不能赋值null,所以最后的检查是多余的。

但是您忘记了 DataSet 可能是空的,因此不包含任何 DataTables。在这种情况下,您的 if 会在 dataSet.Tables[0] 处抛出异常。

我会使用:

int? firstTablesRowCount = dataSet?.Tables.Cast<DataTable>().FirstOrDefault()?.Rows.Count;
if (firstTablesRowCount.GetValueOrDefault() == 0)
{
    Console.WriteLine($"Error at {nameof(dataSet)}");
}

这确保 DataSet 不为空且包含 table 并且第一个 table 包含行。