如何从DataSource获取对象类型?

时间:2017-08-09 10:48:59

标签: c# .net types

我在Repeater范围内,我想查看它重复OnItemDataBound的哪种对象,但这样做:

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

它返回整个集合的类型:

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

不是BrLayer.Pagina。有办法吗?

2 个答案:

答案 0 :(得分: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()的召唤,即魔术发生的地方。它会返回一个包含原始类型的所有泛型参数的数组。

答案 1 :(得分:1)

OnItemDataBound事件处理程序有一个参数RepeaterItemEventArgs e

你想:

e.Item.DataItem.GetType()

请注意,如果e.Item.DataIteme.Item.ItemTypeHeaderFooterSeparator,则Pager将为空;因此,如果您的Repeater可能包含任何这些元素,则应检查null或检查ItemType

请注意,将为DataSource中的每个项调用OnItemDataBound,并且在一般情况下,不能保证所有项都具有相同的Type。