c# - 在 c# 中编写带有返回值的空引用的更好方法
问题描述
有没有更好的方法来编写这个空检查?我正在检查一个表中的DataSet
空值。
if (dataSet == null || dataSet.Tables == null || dataSet.Tables[0].Rows == null)
{
Console.WriteLine($"Error at {nameof(dataSet)}");
return vatPeriodList;
}
我在 ADO.NET 中工作。
解决方案
你的检查没有意义,也忘记了一个重要的。
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
不为空并包含表,并且第一个表包含行。
推荐阅读
- ios - xCode Archive 在完成前自动取消
- razor - 为什么 Blazor Webassembly 应用程序中的每个 razor 页面导航都会出现“加载...”延迟?
- r - 需要从另一个 DataFrame 更新 R 中的 DataFrame,一个 DataFrame 的 colnames 与另一个 DataFrame 的内容匹配
- netsuite - 将自定义字段添加到付款、存款和退款 (NetSuite)
- discord.py - “RawReactionActionEvent”对象没有属性“作者”添加事件冷却时间的问题
- mongodb - 使用 $match 从具有相同键值的不同数组中查询
- postgresql - 在比较 postgres 和 timescaledb 之间的插入性能时,timescaledb 没有表现得那么好?
- flutter - 如何在颤动中从单例中删除共享首选项的数据?
- google-cloud-firestore - Firestore SecurityRules get () 问题
- azure-web-app-service - 在 Azure 上远程调试 Blazor WASM?