68

現時点では、DataRowインスタンスを反復処理するときにこれを行います。

foreach(DataRow row in table)
  return yield new Thingy { Name = row["hazaa"] };

遅かれ早かれ(つまり、すぐに)、テーブルにロバの列がなくなり、うんちがファンに当たるようになります。大規模なグーグル検索 (約 30 秒) の後、次の保護構文を発見しました。

foreach(DataRow row in table)
  if(row.Table.Columns.Contains("donkey"))
    return yield new Thingy { Name = row["hazaa"] };
  else
    return null;

さて、これは最も単純な構文ですか?! 本当に?フィールドが存在する場合はフィールドを取得し、それ以外の場合はnullを取得するメソッドを期待していました。または、少なくとも、直接行に含まれるメソッド。

何か不足していますか?そのように多くのフィールドをマッピングするので、コードはひどく読めなくなります...

4

6 に答える 6

124

拡張メソッドを作成して、よりクリーンにすることができます。

static class DataRowExtensions
{
    public static object GetValue(this DataRow row, string column)
    {
        return row.Table.Columns.Contains(column) ? row[column] : null;
    }
}

以下のように呼び出します。

foreach(DataRow row in table)
    return yield new Thingy { Name = row.GetValue("hazaa") };
于 2013-08-13T11:54:56.323 に答える