私はこの問題に関する既存の質問/回答をくまなく調べましたが、それらのどれも私が理解した方法で私が探していたものを正確に綴っていませんでした。これが私のスニペットです:
Type t = **?**
_SecondRole.ProvisionRelationship<t>(_FirstRole);
方法はよくわかりませんが、ここではリフレクションを使うことになっていると思います。これが機能するように「t」を定義するにはどうすればよいですか?
助けてくれてありがとう。
_FirstRole
が不明のインスタンスである場合、たとえばt
、次のようになります。
object _FirstRole = Activator.CreateInstance(t);
dynamic
次に、ここで悪用できます。
dynamic _FirstRole = Activator.CreateInstance(t); // or whatever
_SecondRole.ProvisionRelationship(_FirstRole);
2行目はdynamic
ステートメントであり、実行時に部分的に評価されます(ただし、キャッシュを巧妙に使用します)。つまり、から逆参照されたオブジェクトの実際の型_FirstRole
からジェネリック型推論を実行できます。
そうでない場合、それを呼び出す唯一の方法は、経由GetMethod
とMakeGenericMethod
-であり、これは不当で効率的ではありません。そのシナリオでは、単に一般的なものではなく_SecondRole.ProvisionRelationship
、パラメーターを受け入れるようにリファクタリングすることを強くお勧めします。Type
もちろん、既存のコードに影響を与えないように、汎用バージョンを提供することもできます。
void ProvisionRelationship(Type type, SomeType role) {...}
void ProvisionRelationship<T>(SomeType role) {
ProvisionRelationship(typeof(T), role);
}
次のように呼び出します。
_SecondRole.ProvisionRelationship(t, _FirstRole);