“System.Reflection.MdFieldInfo”类型的对象无法转换为“MyEnum”类型

时间:2013-08-23 19:31:13

标签: c# .net dynamic reflection

我在运行时加载一个程序集并尝试在运行时执行大量操作,这太过分了,但无论如何这是我想要实现的:

我在外部程序集中有一个名为student的类,我在运行时加载

public class Student
{
    public bool IsGood { get; set; }
    public StudentType St { get; set; }
    public University University { get; set; }
}

我可以通过执行以下操作从程序集动态加载对象:

var assembly = Assembly.LoadFrom("//path");

Type type = assembly.GetType("TestFrameWork.Student");
var student = Activator.CreateInstance(type); 

现在轮到设置属性,这些属性也是从外部程序集动态加载的某些类型。

Type UniversityType = assembly.GetType("TestFrameWork.University");
type.GetProperty("University").SetValue(student, Activator.CreateInstance(UniversityType), null);

很好的部分是它也有效!!

但是

这是问题开始的地方。当我尝试从同一个程序集中分配作为枚举的StudentType时,它会失败并显示错误

  

'System.Reflection.MdFieldInfo'类型的对象无法转换为

     

输入'MyEnum'

这就是我试图设置它的方式:

type3 = assembly.GetType("TestFrameWork.StudentType");
type.GetProperty("St").SetValue(student, type3.GetField("Good"), null);

此代码失败..

1 个答案:

答案 0 :(得分:3)

我认为你需要一个Field.GetValue

type.GetProperty("St").SetValue(student, type3.GetField("Good").GetValue(instance), null);

Type.GetField会返回FieldInfo,但您实际需要传递的参数是枚举值。

注意:我认为Goodtype3上的一个字段,其类型为枚举StudentType