如何使用Type类型的变量作为Type?

LoonyLadle

我有一个在类型列表上运行的foreach循环。将Type类型的变量作为Type传入将完全失败。基于在此站点上看到的类似问题,我编写了一种基于反射的解决方案,但是在运行时失败了。我不知道如何从这一点开始。

foreach (Type defType in GenDefDatabase.AllDefTypesWithDatabases())
{   
    // Compile Error: 'defType' is a variable but is used like a type
    DefDatabase<defType>.ResolveAllReferences(); 
    // Runtime Error: System.ArgumentException: The method has 0 generic parameter(s) but 1 generic argument(s) were provided.
    //   at System.Reflection.MonoMethod.MakeGenericMethod (System.Type[] methodInstantiation) [0x00000] in <filename unknown>:0
    typeof(DefDatabase<>).GetMethod("ResolveAllReferences", BindingFlags.Public | BindingFlags.Static).MakeGenericMethod(defType).Invoke(null, null);
}
彼得·杜尼奥

在此语句中:

typeof(DefDatabase<>).GetMethod("ResolveAllReferences",
    BindingFlags.Public | BindingFlags.Static).MakeGenericMethod(defType).Invoke(null, null);

您正在尝试制作一个通用方法。但是通用的是类型,而不是方法。您应该Type.MakeGenericType()改为致电

typeof(DefDatabase<>).MakeGenericType(defType).GetMethod("ResolveAllReferences",
    BindingFlags.Public | BindingFlags.Static).Invoke(null, null);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章