[解決済み] テンプレート型のC#ジェネリックnew()への引数の渡し方
2022-03-23 10:26:58
質問
リストに追加する際に、そのコンストラクタを介して型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.
}
...
}
解決方法は?
関数内で汎用型のインスタンスを作成するには、"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));
関連
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] JavaScriptの「new」キーワードとは何ですか?
-
[解決済み] 型チェック:typeof、GetType、is?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] 型名の後の括弧は、newで違いがあるのでしょうか?
-
[解決済み] 汎用型Tのクラスインスタンスを取得する方法を教えてください。
-
[解決済み] 汎用クラスやメソッドのメンバからTの型を取得する方法
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み】コンストラクタがパラメータを必要とするジェネリック型のインスタンスを作成しますか?