2013-01-12 18 views
1

在我的代碼,我宣佈一個ArrayList中內的父類你如何使用它的字段信息(反射)調用上ArrayList的方法

public class ParentClass { 
... 
public ArrayList hybridElem; 
... 

,然後使用該逃跑的父類的反思,我能夠成功獲得此ArrayList @運行時的FieldInfo。

使用該FieldInfo,我希望能夠添加或讀取hybridElem中的元素。 我能夠獲得ArrayList的所有相關PropertyInfo,如.Item,.Count,.ToArray等等,並且還可以獲取這些屬性的getter和setter。

不幸的是,他們沒有被調用成功,因爲MethodInfo.Invoke預計Object引用ArrayList的

任何解決方案?

+4

你知道的ArrayList是過時的,對? –

+0

@JohnSaunders令人難以置信的是,有人還在使用它。從.NET 2.0開始,這不是一個好的收集方法!這已經是非常長的時間了...... –

+0

與COM無法互操作的泛型集合要好得多。除非你使用COM。 –

回答

0

你可以很容易地做到這一點。然而,正如評論正確地說,我建議你從ArrayList轉換到一個通用的集合。

var instance = new ParentClass(); 
var fieldInfo = instance.GetType().GetProperty("MyList"); 
var arrayList = fieldInfo.GetValue(instance) as ArrayList; 
var count = arrayList.Count; 

有了:

public class ParentClass 
{ 
    public ArrayList MyList { get; set; } 

    public ParentClass() 
    { 
     MyList = new ArrayList(); 
    } 
} 

另外,以使其適應你的類,它使用的字段(假定該字段的地方初始化):

var instance = new ParentClass(); 
var fieldInfo = instance.GetType().GetField("hybridElem"); 
var arrayList = fieldInfo.GetValue(instance) as ArrayList; 
var count = arrayList.Count; 
+0

謝謝你的回答,約翰和夏娃!!我只想確認一件事情,當我打電話給fieldInfo.GetValue(實例)時,我會參考arraylist?通過反思,我希望能夠將元素添加到Arraylist中。至於ArrayList的選擇,沒有試圖防守,我沒有選擇使用ArrayList,我還沒有在這個項目中完成一個月。乍一看,我的確看到使用ArrayList的優點,因爲被插入到ArrayList的對象的類型不受限制,而且列表是一個相當不相交和動態的。 – user1972185

+0

我肯定會從ArrayList切換到Generic並從高端獲得批准。 – user1972185

+0

@ user1972185是的,'GetValue'的結果將返回* that * ArrayList的引用,而不是它的副本。 – Mir

相關問題