【问题标题】:How to loops over a dataset's table's DataRowCollection without null checking如何在不检查空值的情况下遍历数据集表的 DataRowCollection
【发布时间】:2015-08-03 00:50:26
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: .net dataset null-check datarowcollection


    【解决方案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
    }
    

    【讨论】:

    • 谢谢,我应该想到扩展,也是我第一次看到扩展带参数;有用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2022-08-17
    • 2010-12-31
    • 2022-11-26
    相关资源
    最近更新 更多