类型为';System.Reflection.MdFieldInfo';无法转换为类型';MyEnum

本文关键字:类型 转换 MyEnum System Reflection MdFieldInfo | 更新日期: 2023-09-27 18:28:46

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

我有一个名为"外国汇编中的学生"的类,我正在运行时加载

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);

此代码失败。。

类型为';System.Reflection.MdFieldInfo';无法转换为类型';MyEnum

我想你需要一个Field.GetValue在这里

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

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

注意:我假设Goodtype3上的一个字段,其类型为Enum StudentType