Я работаю над проектом отражения, и теперь я застрял. Если у меня есть объект «myclass», который может содержать список , то кто-нибудь знает, как получить тип, как в приведенном ниже коде, если свойство myclass.SomList пуст?C# общий список <T> как получить тип 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;
}
}
не должна быть типа ItemType = interfaceType.GetGenericArguments() [0]; – Muxa
Смешно, второй пример не выполняется, скажем 'IList'. Исправление ниже http://stackoverflow.com/a/13608408/284795 –
Я знаю, что ответ очень старый, но я стараюсь понять следующее: 'GetGenericArguments() [0];' почему существует 0? Есть ли только один элемент в типе []? – Ismoh