Код, который у вас есть, например, в
GetListType(new List<string>()); // typeof(string)
Он не будет работать, если тип выполнения не имеет общего параметра, например.
public class MyList : List<SomeObject> { }
GetListType(new MyList()); // there is no 0'th generic argument!
Или это не может вернуть то, что вы ожидаете:
GetListType(new Dictionary<string, int>()); // typeof(string)
// even though it ought to be KeyValuePair<string, int>
Может быть, вы должны использовать это вместо того, чтобы:
private Type GetListType<T>(IEnumerable<T> list)
{
return typeof(T);
}
Самым большим недостатком этого является то, что ваш тип должен реализовывать IEnumerable<T>
, а не только IEnumerable
(но если вы хотите получить полезный тип из пустого списка, ему все равно придется это сделать или иначе объявить его тип).
Это же, если список инициализирован. Если вы спрашиваете, как получить тип, когда list == null, то у вас нет типа. – paqogomez
Обратите внимание, что ваш код багги: попробуйте 'GetListType (новый ArrayList());' –