ホームページ >バックエンド開発 >C++ >オブジェクトの作成時に C# の汎用 `new()` 制約に引数を渡す方法

オブジェクトの作成時に C# の汎用 `new()` 制約に引数を渡す方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-22 13:52:18679ブラウズ

How to Pass Arguments to a C# Generic `new()` Constraint When Creating Objects?

C# 汎用テンプレート型の new() にパラメーターを渡します

リスト展開中にコンストラクターを使用してジェネリック型 T の新しいオブジェクトを作成しようとすると、「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>

この関数は、ListItem をパラメータとして受け取り、型 T のオブジェクトを返すデリゲート del を受け入れます。次に、この関数を呼び出してラムダ式をデリゲートとして渡し、必要なパラメーターを備えた必要な型のオブジェクトを作成できます。

<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>
デリゲートを使用すると、汎用プログラミングの柔軟性を維持しながら、作成するオブジェクトにカスタムの初期化ロジックを提供できます。

以上がオブジェクトの作成時に C# の汎用 `new()` 制約に引数を渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。