我已经在这个问题上梳理了现有的问题/答案,但是他们都没有按照我理解的方式拼写出我正在寻找的东西。这是我的片段:
Type t = **?**
_SecondRole.ProvisionRelationship<t>(_FirstRole);
我相信我想在这里使用反思,虽然我不完全明白如何。如何定义“t”这样有用呢?
感谢您的帮助。
答案 0 :(得分:1)
如果_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);