Was ist der Unterschied zwischen Type.IsGenericType
und Type.IsGenericTypeDefinition
? Interessanterweise ist MSDNs Verknüpfung für IsGenericTypeDefinition gebrochen.Unterschied zwischen IsGenericType und IsGenericTypeDefinition
Nachdem ich ein wenig mit dem Versuch gespielt habe, alle in einem DbContext definierten DbSets abzurufen, führte ich zu folgendem: Welches Verhalten versuche ich zu verstehen: Das Filtern von Eigenschaften über IsGenericType gibt die gewünschten Ergebnisse zurück, während IsGenericTypeDefinition nicht (gibt keine zurück).
Es ist interessant, dass von this Post habe ich den Eindruck, dass der Autor seine DbSets mit IsGenericTypeDefinition bekommen, während ich nicht habe.
folgt ein Beispiel, das die Diskussion zeigt:
private static void Main(string[] args)
{
A a = new A();
int propertyCount = a.GetType().GetProperties().Where(p => p.PropertyType.IsGenericType).Count();
int propertyCount2 = a.GetType().GetProperties().Where(p => p.PropertyType.IsGenericTypeDefinition).Count();
Console.WriteLine("count1: {0} count2: {1}", propertyCount, propertyCount2);
}
// Output: count1: 1 count2: 0
public class A
{
public string aaa { get; set; }
public List<int> myList { get; set; }
}
Stimmen Sie nicht zu, dass es keinen Sinn macht, dass [hier] (http://stackoverflow.com/questions/6304702/cast-propertyinfo-to-generic-type) der Autor DbSet-Instanzen mit IsGenericTypeDefinition bekommt? Basierend auf Ihrer Antwort (und einigen Tests von meiner Seite), erhalten Sie DbSet nicht als Eigenschaften zurück, wenn Sie 'GetProperties() ausführen. Wo (p => p.IsGenericTypeDefinition)' – Veverke
@ Veverke Sie haben absolut Recht, der Autor der Antwort Copy-pasted OP-Code mit einem Fehler. Ich habe diese Antwort bearbeitet, vielen Dank! – dasblinkenlight
Mit anderen Worten, ein Typ, für den IsGenericType den Wert true zurückgibt, ist ein generischer Typ "real/complete/usable". Ein Typ, für den IsGenericTypeDefinition true ist, ist im Code noch nicht wirklich verwendbar, es ist ein generischer Typ "Blueprint/Container". – Veverke