C# でコンストラクターを使用してジェネリック型のインスタンスを作成する
C# では、コンストラクターを使用してジェネリック型の新しいオブジェクトを作成するのが難しい場合があります。次のシナリオを考えてみましょう:
<code class="language-csharp">// 创建类型为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)); // 错误! } ... }</code>
このコードをコンパイルしようとすると、変数 T のインスタンスの作成時に引数を指定できないことを示すコンパイラ エラーが発生する場合があります。これは、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# でコンストラクターを使用してジェネリック型のインスタンスを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。