Estoy trabajando en un proyecto de reflexión, y ahora estoy atascado. Si tengo un objeto de "myclass" que puede contener una lista ¿alguien sabe cómo obtener el tipo como en el siguiente código si la propiedad myclass.SomList está vacía?C# lista genérica <T> cómo obtener el tipo de T?
List<myclass> myList = dataGenerator.getMyClasses();
lbxObjects.ItemsSource = myList;
lbxObjects.SelectionChanged += lbxObjects_SelectionChanged;
private void lbxObjects_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Reflect();
}
Private void Reflect()
{
foreach (PropertyInfo pi in lbxObjects.SelectedItem.GetType().GetProperties())
{
switch (pi.PropertyType.Name.ToLower())
{
case "list`1":
{
// This works if the List<T> contains one or more elements.
Type tTemp = GetGenericType(pi.GetValue(lbxObjects.SelectedItem, null));
// but how is it possible to get the Type if the value is null?
// I need to be able to create a new object of the type the generic list expect.
// Type type = pi.getType?? // how to get the Type of the class inside List<T>?
break;
}
}
}
}
private Type GetGenericType(object obj)
{
if (obj != null)
{
Type t = obj.GetType();
if (t.IsGenericType)
{
Type[] at = t.GetGenericArguments();
t = at.First<Type>();
} return t;
}
else
{
return null;
}
}
no debería ser Tipo itemtype = interfaceType.GetGenericArguments() [0]; – Muxa
De manera divertida, el segundo ejemplo falla, digamos 'IList'. Reparar a continuación http://stackoverflow.com/a/13608408/284795 –
Sé que la respuesta es muy antigua, pero trato de entender lo siguiente: 'GetGenericArguments() [0];' ¿por qué está el 0? ¿Hay siempre solo un elemento en el Tipo []? – Ismoh