0
我已經梳理了關於這個問題的現有問題/答案,但是沒有一個能夠以我理解的方式明確地說明我正在尋找什麼。這裏是我的代碼片段:如何動態創建泛型以便傳遞到泛型方法?
Type t = **?**
_SecondRole.ProvisionRelationship<t>(_FirstRole);
我相信我想在這裏使用反射,雖然我不完全瞭解。我該如何定義「t」才能使用?
感謝您的協助。
我已經梳理了關於這個問題的現有問題/答案,但是沒有一個能夠以我理解的方式明確地說明我正在尋找什麼。這裏是我的代碼片段:如何動態創建泛型以便傳遞到泛型方法?
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);
第二行現在是一個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);
我會說這是[如何使用反射來調用通用方法]重複(http://stackoverflow.com/questions/232535/how-to-use-reflection-to-call-generic-method/232621#232621),但它看起來像你的問題「什麼類型傳遞給[MethodInfo。 MakeGenericMethod](http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.makegenericmethod.aspx)...請澄清。 – 2013-03-04 05:19:41
這是什麼'_FirstRole'?是一個't'由任何機會?有時候會有一些三cks在這裏,但它取決於**精確**的情況。 – 2013-03-04 07:02:42