这是一个奇怪的问题,我偶然发现,涉及反思:
我在运行时创建MyGenericType<T>
,其中T
是运行时类型:
object genType = Activator.CreateInstance(typeof(MyGenericType<>).MakeGenericType(runtimeType));
然后我需要将它作为参数传递给另一个只接受IEnumerable<runtimeType>
。
我无法使用dynamic
,因为MyGenericType
只显式实现IEnumerable,而不是隐式实现。
无论如何都要投射到IEnumerable<runtimeType>
?
答案 0 :(得分:2)
创建一个通用调用方法并调用它。在我的代码示例中,CallMethod通过反射调用,该方法调用采用IEnumerable<T>
static void Main(string[] args)
{
Type runtimeType = typeof(string);
object genType = Activator.CreateInstance(typeof(MyGenericType<>).MakeGenericType(runtimeType));
var genericMethod = ((Action<MyGenericType<object>>)CallMethod)
.Method
.GetGenericMethodDefinition()
.MakeGenericMethod(runtimeType)
.Invoke(null, new object[] { genType });
}
static void CallMethod<T>(MyGenericType<T> myGeneric)
{
MyEnumerableMethod((IEnumerable<T>)myGeneric);
}