system.Collection <t> </t>的类型

时间:2009-09-20 18:45:45

标签: c# collections type-systems

我正在创建<T>的列表,但我想知道该T对象的类型。 (我在我的项目中使用反射,所以当我创建代码时我不知道类型。

首先我拥有List - &gt; List<T>

现在我想获得该T对象的所有属性(用于在数据网格中创建列)

任何帮助?

5 个答案:

答案 0 :(得分:11)

您可以在类或通用方法中使用typeof(T):

void ProcessList<T>(List<T> list) {
    Type typeOfT = typeof(T);
    // Work with type...
}

答案 1 :(得分:1)

对于GetListType函数,请参阅this answer。要获取列表属性以用于数据绑定目的,您应该使用组件模型(为了兼容性) - 即。

PropertyDescriptorCollection props = TypeDescriptor.GetProperties(type);

然后使用PropertyDescriptor / GetValue等查看每个Converter。您的列表代码通常必须针对非通用IList进行操作;类似的东西:

IList list = ...
object obj = list[rowIndex];
// then for any given "prop"
object val = prop.GetValue(obj);
string displayText = prop.Converter.ConvertToString(val);

但是,如果您想要“完整”,您还需要查看IListSourceITypedList

答案 2 :(得分:0)

您可以从该列表中获取一个对象并查看其类型。我认为虽然肯定有更好的方法。

答案 3 :(得分:0)

是否像GetType()一样简单,然后使用GetProperties()的反射?

答案 4 :(得分:0)

 values.GetType().GetGenericArguments()[0].FullName 

上面给出了类型'T'

的类型对象
values.GetType().GetGenericArguments()[0].GetProperties(System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance) 

上面给出了'T'上可用的公共属性,你可以根据需要传入适当的BindingFlags。