How do I get the actual type of T in a generic List at run time using reflection?
You can use Type.GetGenericArguments to return the type T in a List<T>
.
For example, this will return the Type for any List<T>
passed as an argument:
Type GetListType(object list)
{
Type type = list.GetType();
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>))
return type.GetGenericArguments()[0];
else
throw new ArgumentException("list is not a List<T>", "list");
}
It depends on what exactly you’re asking:
While writing code inside a generic type Blah<T>
, how do I get the reflection type T
?
Answer: typeof(T)
I have an object which contains a List<T>
for some type T
. How do I retrieve the type T
via reflection?
Short answer: myList.GetType().GetGenericArguments()[0]
Long answer:
var objectType = myList.GetType();
if (!objectType.IsGenericType() ||
objectType.GetGenericTypeDefinition() != typeof(List<>))
{
throw new InvalidOperationException(
"Object is not of type List<T> for any T");
}
var elementType = objectType.GetGenericArguments()[0];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With