2013-08-23 115 views
-1

我在運行時加載程序集,並嘗試在運行時執行很多操作,但這太過分了,但反正這就是我努力實現:'System.Reflection.MdFieldInfo'類型的對象無法轉換爲'MyEnum'類型

我有在國外組裝一類叫學生這我在運行時加載

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

你的問題是關於'MdFieldInfo'&'MyEnum'但你永遠不向他們展示在你的代碼。 – I4V

+0

我很抱歉混淆它不MyEnum它的StudentType和MdFieldInfoe是東西.net是拋出錯誤。我不知道它來自何處。我最好的猜測是,它是FieldInfo的子類型 – TeaLeave

回答

2

我想你需要一個Field.GetValue這裏

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

Type.GetField回報FieldInfo但實際上你需要傳遞的參數是枚舉值什麼。

注:我認爲Goodtype3一個字段是類型枚舉StudentType

+0

這裏的實例是什麼意思? type3'的' – TeaLeave

+0

對象來說,如果它是一個靜態字段,則'null'足夠 –

+0

3型是指枚舉,它不是靜態的 – TeaLeave

相關問題