我在运行时加载一个程序集并尝试在运行时执行大量操作,这太过分了,但无论如何这是我想要实现的:
我在外部程序集中有一个名为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);
此代码失败..
答案 0 :(得分:3)
我认为你需要一个Field.GetValue
type.GetProperty("St").SetValue(student, type3.GetField("Good").GetValue(instance), null);
Type.GetField
会返回FieldInfo
,但您实际需要传递的参数是枚举值。
注意:我认为Good
是type3
上的一个字段,其类型为枚举StudentType