-1

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

我在运行时加载的外部程序集中有一个名为 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' 类型的对象无法转换为

输入“我的枚举”

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

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

此代码失败..

4

1 回答 1

3

我想你需要在Field.GetValue这里

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

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

注意:我假设Good是一个type3Enum 类型的字段StudentType

于 2013-08-23T19:36:44.080 回答