ホームページ > バックエンド開発 > C++ > C# のジェネリック メソッドで変数の型をパラメーターとして使用するにはどうすればよいですか?

C# のジェネリック メソッドで変数の型をパラメーターとして使用するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-17 20:32:10
オリジナル
881 人が閲覧しました

How Can I Use a Variable's Type as a Parameter in a C# Generic Method?

C# のジェネリック メソッドでパラメーターとして変数型を使用する

C# のジェネリクスは、型ごとに個別の実装を実装することなく、さまざまなデータ型を操作できる柔軟なメソッドとクラスを作成する方法を提供します。ただし、変数の型をジェネリック メソッドのパラメーターとして使用することは、特にコンパイル時に型が不明な場合には困難になる可能性があります。

次の一般的なメソッドを考えてみましょう:

<code class="language-csharp">bool DoesEntityExist<T>(Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;</code>
ログイン後にコピー

このメソッドは、GUID とトランザクションに基づいてエンティティが存在するかどうかを確認します。このメソッドを使用するには、エンティティのタイプがコンパイル時にわかっている必要があります。これは通常、次のようにメソッドを呼び出すときに型パラメーターを明示的に指定することで行われます。

<code class="language-csharp">DoesEntityExist<MyType>(entityGuid, transaction);</code>
ログイン後にコピー
ただし、エンティティの型が実行時にしかわからない場合は、上記の方法を使用できません。 Type 型の変数を使用してこのメ​​ソッドを呼び出そうとすると、コンパイラ エラーが発生します:

<code>找不到类型或命名空间名称“T”(是否缺少 using 指令或程序集引用?)</code>
ログイン後にコピー
この問題を解決するには、リフレクションを使用して、必要な型パラメーターを指定してジェネリック メソッドを呼び出すことができます。これを行う方法は次のとおりです:

<code class="language-csharp">Type t = entity.GetType();
MethodInfo method = GetType().GetMethod("DoesEntityExist")
                             .MakeGenericMethod(new Type[] { t });
method.Invoke(this, new object[] { entityGuid, transaction });</code>
ログイン後にコピー
ただし、このアプローチは効率が低く、維持が難しい場合があります。したがって、一般に、型パラメーターが引数として渡されるような方法でジェネリック メソッドを定義することをお勧めします。これにより、実行時に必要な動的型推論を使用しながら、コンパイル時の型の安全性を維持することができます。

以上がC# のジェネリック メソッドで変数の型をパラメーターとして使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート