0

既に入力されているデータセットを使用しています。次のように、テーブル内の行を反復処理しています。

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 を返すためだと思います。

テーブルの行を単純にループして、テーブルが存在しない場合は空のコレクションをループする方法はありますか?

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 に答える