0

私はこの問題に関する既存の質問/回答をくまなく調べましたが、それらのどれも私が理解した方法で私が探していたものを正確に綴っていませんでした。これが私のスニペットです:

Type t = **?**

_SecondRole.ProvisionRelationship<t>(_FirstRole);

方法はよくわかりませんが、ここではリフレクションを使うことになっていると思います。これが機能するように「t」を定義するにはどうすればよいですか?

助けてくれてありがとう。

4

1 に答える 1

1

_FirstRoleが不明のインスタンスである場合、たとえばt、次のようになります。

object _FirstRole = Activator.CreateInstance(t);

dynamic次に、ここで悪用できます。

dynamic _FirstRole = Activator.CreateInstance(t); // or whatever
_SecondRole.ProvisionRelationship(_FirstRole);

2行目はdynamicステートメントであり、実行時に部分的に評価されます(ただし、キャッシュを巧妙に使用します)。つまり、から逆参照されたオブジェクトの実際の型_FirstRoleからジェネリック型推論を実行できます。


そうでない場合、それを呼び出す唯一の方法は、経由GetMethodMakeGenericMethod-であり、これは不当で効率的ではありません。そのシナリオでは、単に一般的なものではなく_SecondRole.ProvisionRelationship、パラメーターを受け入れるようにリファクタリングすることを強くお勧めします。Typeもちろん、既存のコードに影響を与えないように、汎用バージョンを提供することもできます。

void ProvisionRelationship(Type type, SomeType role) {...}
void ProvisionRelationship<T>(SomeType role) {
    ProvisionRelationship(typeof(T), role);
}

次のように呼び出します。

_SecondRole.ProvisionRelationship(t, _FirstRole);
于 2013-03-04T07:07:45.037 に答える