我正在运行时加载一个程序集,并试图在运行时进行大量操作,这太过分了,但无论如何,这就是我试图实现的:
我有一个名为"外国汇编中的学生"的类,我正在运行时加载
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);
此代码失败。。
我想你需要一个Field.GetValue
在这里
type.GetProperty("St").SetValue(student, type3.GetField("Good").GetValue(instance), null);
Type.GetField
返回FieldInfo
,但实际需要作为参数传递的是枚举值。
注意:我假设Good
是type3
上的一个字段,其类型为Enum StudentType