C # generische Liste <T>, wie man den Typ von T erhält? [Duplikat]

Diese Frage hat hier bereits eine Antwort:

Wie erhält man den Typ von T von einem Mitglied einer generischen Klasse oder Methode? 17 Antworten

Ich arbeite an einem Reflexionsprojekt und stecke jetzt fest. Wenn ich ein Objekt von "myclass" habe, das eine Liste enthalten kann, weiß jemand, wie man den Typ wie im Code unten erhält, wenn die Eigenschaft myclass.SomList leer ist?

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;
            }
        }

Antworten auf die Frage(4)

Ihre Antwort auf die Frage