私は次のことをやろうとしている、ジェネリックに少し錆びていますが、コンパイラは文句:C#ジェネリックの質問
protected List<T> PopulateCollection(DataTable dt) where T: BusinessBase
{
List<T> lst = new List<T>();
foreach (DataRow dr in dt.Rows)
{
T t = new T(dr);
lst.Add(t);
}
return lst;
}
だから、あなたが見ることができるように、私はオブジェクトに表の内容をダンプしようとしています(DataRowをコンストラクタに渡して)コレクションにオブジェクトを追加します。 Tはそれが知っている型または名前空間ではなく、非総称宣言のどこにTを使うことができないと文句を言う。
これはできませんか?
protected List<T> PopulateCollection<T>(DataTable dt) where T : BusinessBase, new()
...
私はコンストラクタにするDataRowを渡すことはできませんが、あなたはBusinessBase
のプロパティに割り当てることによってこれを解決することができます:あなたは、おそらく次のように、T上のnew
ジェネリック制約を追加する必要があります
+1この問題と最後のバージョンについてはっきりしています。この場合、中間バージョンはforeachよりはるかに簡単だとは思わない。 – eglasius
私は編集する権限がありませんので、誰でも変更できます。 dt.Rows.AsEnumerable()を返します。Select(selector).ToList(); 〜 return dt.AsEnumerable()。Select(セレクタ).ToList(); AsEnumerableは.RowsコレクションにないDataTableの拡張メソッドです。 – AngryHacker
@AngryHacker:ありがとう、終わった。 –