2013-06-29 48 views
0

我正在編寫一個反映我的類並將它們轉換爲UI字段的編輯器,以便通過更改UI中字段的值並保存它們來創建對象文件。如何獲得通用列表中的T類型

問題是,當我使用通用列表時,編輯器構建器停止,因爲它不知道列表中對象的類型以反映它,它始終將對象視爲object

我只需要知道列表或字典中的對象的類型以反映它。

驗證碼:

class ListUIEditor<T> : BaseEditor where T : new() 
{ 
    void BuildEditor() 
    { 
     Button addbutton = new Button("+"); 
     addbutton.Clicked += add_Event; 

     for (int i = 0; i < ((List<T>)base.boundObject).Count; i++) 
     { 
      container = new Container();   
      ObjectUIEditor editor = new ObjectUIEditor("itemName", 
                 ((List<T>)base.boundObject)[i], 
                 container); 
      editor.buildEditor(); 
      itemsSubEditors.Add(i, editor); 
     } 
    } 

    protected void add_Event(object sender, EventArgs e) 
    {  
     T newObject = new T();   
     container = new Container();    
     ObjectUIEditor editor = new ObjectUIEditor("itemName", newObject, container); 
     editor.buildEditor();   
     itemsBox.ShowAll(); 
    } 
} 
+1

的可能重複(HTTP [C#泛型列表如何得到T的類型?]:// stackoverflow.com/questions/557340/c-sharp-generic-list-t-how-to-get-the-type-of-t) – nawfal

+0

我看到了這個問題,但不同的是,我不是要求類型的T中包含它的ame類: 「您的列表與容器類本身具有相同的類型參數。」 – user2302005

+0

這一個也返回類型:對象 不是我想要的類 – user2302005

回答

0

試試這個:

Type type = listObj.GetType().GetGenericArguments()[0]; 

ref

+0

我試過兩種方法,但都沒有工作: 1: T listObj = new T() Type type = listObj.GetType()。GetGenericArguments()[0]; 這給了一個例外 2: Type [] type = boundObject.GetType()。GetGenericArguments(); 這將返回一個數組,其中包含一個元素witch:object – user2302005

+0

@ user2302005 - 如果您在通用參數匹配通用列表類型的泛型方法中,則可以使用'Type itemType = typeof(T);'。 – Lee

+1

@ user2302005「2:Type [] type = boundObject.GetType()。GetGenericArguments();這將返回一個數組,其中包含一個元素女巫是:object」 - 你在處理一個'List '?如果是這樣,如果你只有這種類型的信息,你不能確定它可以包含哪些類型的對象,你需要看看單個對象。 – hvd