リストに追加するときに、コンストラクターを介して T 型の新しいオブジェクトを作成しようとしています。
コンパイル エラーが発生します。エラー メッセージは次のとおりです。
'T': 変数のインスタンスを作成するときに引数を指定できません
しかし、私のクラスにはコンストラクター引数があります。どうすればこれを機能させることができますか?
public static string GetAllItems<T>(...) where T : new()
{
...
List<T> tabListItems = new List<T>();
foreach (ListItem listItem in listCollection)
{
tabListItems.Add(new T(listItem)); // error here.
}
...
}
ベストアンサー1
関数内でジェネリック型のインスタンスを作成するには、「new」フラグで制約する必要があります。
public static string GetAllItems<T>(...) where T : new()
ただし、これは、パラメータを持たないコンストラクターを呼び出す場合にのみ機能します。ここでは当てはまりません。代わりに、パラメータに基づいてオブジェクトを作成できるようにする別のパラメータを提供する必要があります。最も簡単なのは関数です。
public static string GetAllItems<T>(..., Func<ListItem,T> del) {
...
List<T> tabListItems = new List<T>();
foreach (ListItem listItem in listCollection)
{
tabListItems.Add(del(listItem));
}
...
}
次のように呼び出すことができます
GetAllItems<Foo>(..., l => new Foo(l));