C# 如何动态创建泛型类型以传递给泛型方法?

C# 如何动态创建泛型类型以传递给泛型方法?,c#,generics,types,C#,Generics,Types,我已经梳理了关于这件事的现有问题/答案,但没有一个能以我理解的方式准确地说明我在寻找什么。以下是我的片段: Type t = **?** _SecondRole.ProvisionRelationship<t>(_FirstRole); 类型t=**** _SecondRole.ProvisionRelationship(_FirstRole); 我相信我应该在这里使用反射,尽管我不完全理解如何使用。我如何定义“t”使其起作用 感谢您的帮助。如果\u FirstRole是未知t

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

Type t = **?**

_SecondRole.ProvisionRelationship<t>(_FirstRole);
类型t=****
_SecondRole.ProvisionRelationship(_FirstRole);
我相信我应该在这里使用反射,尽管我不完全理解如何使用。我如何定义“t”使其起作用


感谢您的帮助。

如果
\u FirstRole
是未知
t
的实例,例如:

object _FirstRole = Activator.CreateInstance(t);
然后,您可以在此处利用
dynamic

dynamic _FirstRole = Activator.CreateInstance(t); // or whatever
_SecondRole.ProvisionRelationship(_FirstRole);
第二行现在是一个
动态
语句,在运行时进行了部分计算(但使用了一些巧妙的缓存),这意味着它可以根据从
\u FirstRole
中取消引用的对象的实际类型执行泛型类型推断


如果不是这样,那么调用它的唯一方法是通过
GetMethod
MakeGenericMethod
——这既笨拙又效率不高。在这种情况下,我强烈建议重构
\u SecondRole.ProvisionRelationship
以接受
类型
参数,而不仅仅是泛型参数;当然,您仍然可以提供通用版本以避免影响现有代码:

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

我想说这是重复的,但它看起来像是你关于“传递给哪种类型……请澄清。这里的
\u FirstRole
是什么?这是一个
t
吗?这里有时有一些技巧,但这取决于具体的场景。
_SecondRole.ProvisionRelationship(t, _FirstRole);