Тип системы. Коллекция <T> - PullRequest
       35

Тип системы. Коллекция <T>

1 голос
/ 20 сентября 2009

Я создаю список <T>, но я хочу знать тип этого T-объекта. (Я использую отражение в своем проекте, поэтому я не знаю тип при создании своего кода.

Итак, сначала у меня есть мои List -> List<T> значения

Теперь я хочу получить все свойства этого T-объекта (для создания столбцов в сетке данных)

любая помощь?

Ответы [ 5 ]

11 голосов
/ 20 сентября 2009

Вы можете просто использовать typeof (T) в своем классе или универсальный метод:

void ProcessList<T>(List<T> list) {
    Type typeOfT = typeof(T);
    // Work with type...
}
1 голос
/ 20 сентября 2009

Для функции GetListType см. этот ответ . Чтобы получить свойства списка для привязки данных , вам действительно нужно использовать компонентную модель (для совместимости) - т.е.

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);

Однако, если вы хотите быть «завершенным», вам также нужно взглянуть на IListSource и ITypedList

0 голосов
/ 20 сентября 2009
 values.GetType().GetGenericArguments()[0].FullName 

Выше приведен тип объекта для типа 'T'

values.GetType().GetGenericArguments()[0].GetProperties(System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance) 

Выше приведены общедоступные свойства, доступные для 'T', вы можете передавать соответствующие BindingFlags по своему усмотрению.

0 голосов
/ 20 сентября 2009

Это просто, как GetType () , а затем использовать отражение для GetProperties () ?

0 голосов
/ 20 сентября 2009

Вы можете взять один объект из этого списка и посмотреть на его тип. Хотя, конечно, есть лучший способ, я думаю.

...