2017-08-09 59 views
-2

我是Repeater內,我想看看哪種對象的重複OnItemDataBound,但是這樣做:如何從DataSource獲取對象的類型?

public void RepeaterListato_OnItemDataBound(Object Sender, RepeaterItemEventArgs e) 
{ 
    Response.Write(repeaterListato.DataSource.GetType()); 
} 

它返回整個集合的類型:

System.Collections.Generic.List`1[BrLayer.Pagina] 

BrLayer.Pagina。有沒有辦法?

+1

[如何從泛型類或方法的成員獲取T的類型?](https://stackoverflow.com/questions/557340/how-to-get-the-type-of- t-from-a-generic-class-or-method) – derape

+1

@derape,Repeater不一定綁定到泛型集合,所以你的提示是不合適的。 – Joe

+1

爲什麼downvotes?特別是沒有有用的評論來解釋如何改善問題。 – Joe

回答

1

OnItemDataBound事件處理函數的參數爲​​RepeaterItemEventArgs e

你想:

e.Item.DataItem.GetType() 

注意e.Item.DataItem將是無效的,如果e.Item.ItemTypeHeaderFooterSeparatorPager;所以你應該檢查空值或檢查ItemType如果你的中繼器可能有任何這些元素。

請注意,OnItemDataBound將針對DataSource中的每個項目調用,並且在一般情況下,不能保證所有項目都具有相同的Type。

+0

typo:它的'e.Item.DataItem.GetType()'謝謝 – markzzz

+0

@markzzz - true,已更正。 – Joe

1

絕對有可能!這裏有一個工作示例:

class Program 
{ 
    static List<string> MyGenericList = new List<string>(); 

    static void Main(string[] args) 
    { 
     Console.WriteLine($"My list class's type is: {MyGenericList.GetType()}, and its first generic argument is: {MyGenericList.GetType().GetGenericArguments()[0]}"); 
     Console.ReadLine(); 
    } 
} 

通知調用Type.GetType().GetGenericArguments(),這就是神奇的發生。它會返回一個包含原始類型的所有通用參數的數組。