VB.Net - как я могу получить тип объекта, содержащегося в списке


Если у меня есть список...

dim l as List(of MyClass) = new List(of MyClass)

И я хочу получить тип объектов, содержащихся в списке, как это сделать?

Очевидным ответом, который кажется невозможным из моей реальной реализации, было бы сделать что-то вроде этого...
public function GetType(byval AList as IList(of GenericType)) as System.Type
  dim lResult as system.type = nothing
  if AList.Count > 0 then lResult = AList(0).GetType
  return lResult
end function

Но что делать, если список пуст и я все еще хочу знать тип, который он содержит?

1 3

1 ответ:

Есть хорошая статья об этом в MSDN, здесь

В основном вы можете использовать GetGenericArguments (), чтобы получить массив типов, предоставленных в качестве аргументов для вашего универсального типа. В случае со списком есть только один аргумент, поэтому вы получите то, что вам нужно, используя eg

dim l as List(of MyClass) = new List(of MyClass)
dim t as Type = (l.GetGenericArguments())(0)