0

我已经梳理了关于这个问题的现有问题/答案,但没有一个以我理解的方式准确地说明我在寻找什么。这是我的片段:

Type t = **?**

_SecondRole.ProvisionRelationship<t>(_FirstRole);

我相信我应该在这里使用反射,尽管我不完全理解如何。我如何定义“t”以便这个工作?

感谢您提供任何帮助。

4

1 回答 1

1

如果_FirstRole是 unknown 的一个实例t,例如来自:

object _FirstRole = Activator.CreateInstance(t);

那么你可以dynamic在这里利用:

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

第二行现在是一个dynamic语句,在运行时部分评估(但有一些巧妙的缓存使用) - 这意味着它可以从取消引用的对象的实际类型_FirstRole执行泛型类型推断。


如果不是这种情况,那么调用它的唯一方法是通过GetMethodand MakeGenericMethod- 这是笨拙且效率不高的。在那种情况下,我强烈建议重构_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 回答