在 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 包含行。
有没有更好的方法来编写这个空检查?我正在检查 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 包含行。