new()
コンストラクター パラメーター質問:
new()
制約を使用するジェネリック メソッドでコンストラクター引数を持つ型 T の新しいオブジェクトを作成しようとすると、コンパイル エラーが発生します。エラー メッセージには、オブジェクトの初期化中にパラメータを指定できないことが示されています。
<code class="language-csharp">public static string GetAllItems<T>(...) where T : new() { List<T> tabListItems = new List<T>(); foreach (ListItem listItem in listCollection) { tabListItems.Add(new T(listItem)); // 此处出错。 } ... }</code>
解決策:
コンストラクター引数を使用してジェネリック型のオブジェクトを作成するには、new
制約を使用するだけでは十分ではありません。必要なパラメータを使用して初期化を処理するには、カスタム関数を導入する必要があります。その方法は次のとおりです:
<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> del) { ... List<T> tabListItems = new List<T>(); foreach (ListItem listItem in listCollection) { tabListItems.Add(del(listItem)); // 使用函数创建对象。 } ... }</code>
カスタム関数を使用すると、次のように汎用メソッドを呼び出し、型を指定して初期化関数を提供できます。
<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>
以上がC# でコンストラクターの引数を汎用 `new()` 制約に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。