如何在不进行空值检查的情况下循环访问数据集的 table 的 DataRowCollection
How to loops over a dataset's table's DataRowCollection without null checking
我正在使用已填充的数据集。我像这样遍历 table 中的行:
foreach (DataRow row in this.dataSet.Tables["tablename"].Rows)
{
// do something
}
这工作正常,除非没有行,在这种情况下没有 table,所以我得到一个 'object not set to an instance of an object' 样式错误。 (即 this.dataSet.Tables["tablename"] 为空,所以我实际上是在调用 null.Rows,这当然很麻烦)。
为了解决这个问题,我正在做:
if (this.dataSet.Tables.Contains("tablename"))
{
foreach (DataRow row in this.dataSet.Tables["tablename"].Rows)
{
// do something
}
}
坦率地说,这是丑陋的罪恶。我猜这是因为 .net returns null 不是空对象。
有没有一种方法可以简单地循环遍历 table 的行,如果 table 不存在则循环遍历空集合?
不,你不能。您能做的最好的事情就是在扩展方法中隐藏检查。
如果 table 存在,return table 行,否则 return 空序列。
public static class DataSetExtensions
{
public static IEnumerable<DataRow> RowsOfTable(this DataSet dataSet, string tableName)
{
if (dataSet.Tables.Contains(tableName))
return dataSet.Tables[tableName].AsEnumerable();
return Enumerable.Empty<DataRow>();
}
}
然后用作
DataSet dataSet = new DataSet();
foreach (DataRow row in dataSet.RowsOfTable("tablename"))
{
// do something
}
我正在使用已填充的数据集。我像这样遍历 table 中的行:
foreach (DataRow row in this.dataSet.Tables["tablename"].Rows)
{
// do something
}
这工作正常,除非没有行,在这种情况下没有 table,所以我得到一个 'object not set to an instance of an object' 样式错误。 (即 this.dataSet.Tables["tablename"] 为空,所以我实际上是在调用 null.Rows,这当然很麻烦)。
为了解决这个问题,我正在做:
if (this.dataSet.Tables.Contains("tablename"))
{
foreach (DataRow row in this.dataSet.Tables["tablename"].Rows)
{
// do something
}
}
坦率地说,这是丑陋的罪恶。我猜这是因为 .net returns null 不是空对象。
有没有一种方法可以简单地循环遍历 table 的行,如果 table 不存在则循环遍历空集合?
不,你不能。您能做的最好的事情就是在扩展方法中隐藏检查。
如果 table 存在,return table 行,否则 return 空序列。
public static class DataSetExtensions
{
public static IEnumerable<DataRow> RowsOfTable(this DataSet dataSet, string tableName)
{
if (dataSet.Tables.Contains(tableName))
return dataSet.Tables[tableName].AsEnumerable();
return Enumerable.Empty<DataRow>();
}
}
然后用作
DataSet dataSet = new DataSet();
foreach (DataRow row in dataSet.RowsOfTable("tablename"))
{
// do something
}