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 サイトの他の関連記事を参照してください。