0

我正在使用已经填充的数据集。我正在迭代表中的行,如下所示:

foreach (DataRow row in this.dataSet.Tables["tablename"].Rows)
{
    // do something
}

这工作正常,除非没有行,在这种情况下没有表,所以我得到一个“对象未设置为对象的实例”样式错误。(即 this.dataSet.Tables["tablename"] 为空,所以我实际上是在调用 null.Rows,这当然很糟糕)。

为了解决这个问题,我正在做:

if (this.dataSet.Tables.Contains("tablename"))
{
    foreach (DataRow row in this.dataSet.Tables["tablename"].Rows)
    {
        // do something
    }
}

坦率地说,这就像罪恶一样丑陋。我猜这是因为 .net 返回 null 而不是 null 对象。

有没有一种方法可以简单地循环遍历表的行,如果表不存在则循环遍历空集合?

4

1 回答 1

1

不,你不能。您可以做的最好的事情是在扩展方法中隐藏检查。

如果表存在,则返回表行,否则返回空序列。

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
}
于 2015-05-21T11:28:22.407 回答