-1

実行時にアセンブリをロードし、実行時に多くの操作を実行しようとしていますが、これは行き過ぎですが、とにかくこれが私が達成しようとしていることです:

実行時にロードしている外部アセンブリに学生というクラスがあります

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

このコードは失敗します..

4

1 に答える 1

3

Field.GetValueここが必要だと思います

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

Type.GetField戻りますFieldInfoが、実際にパラメーターとして渡す必要があるのは列挙値です。

注:Enum型Goodのフィールドであると想定していますtype3StudentType

于 2013-08-23T19:36:44.080 に答える