Wird IsConstructedGenericType immer die Negation von IsGenericTypeDefinition für einen generischen Typ sein?

8

Die Dokumentation der Exemplareigenschaft Type.IsConstructedGenericType ist unklar oder irreführend .

Ich habe den folgenden Code ausprobiert, um das tatsächliche Verhalten dieser und verwandter Eigenschaften zu finden:

%Vor%

Der Code läuft durch ein kartesisches Produkt, das aus 36 Typen t besteht.

Ergebnisse: Für 32 Typen (alle außer den 4 Kombinationen Dictionary<int, int> , Dictionary<int, string> , Dictionary<string, int> , Dictionary<string, string> ) war der Wert von ContainsGenericParameters wahr.

Bei 35 Typen war IsGenericTypeDefinition falsch, während IsConstructedGenericType wahr war. Für den letzten Typ, nämlich (nicht überraschend):

%Vor%

Die IsGenericTypeDefinition war wahr und IsConstructedGenericType war falsch.

Kann ich daraus schließen, dass für einen generischen Typ der Wert von IsConstructedGenericType immer das Gegenteil (Negation) von IsGenericTypeDefinition ?

ist

(Die Dokumentation scheint zu behaupten, dass IsConstructedGenericType stattdessen das Gegenteil von ContainsGenericParameters ist, aber wir haben deutlich eine Menge Gegenbeispiele dazu gezeigt.)

    
Jeppe Stig Nielsen 13.09.2013, 22:20
quelle

1 Antwort

4

Ja, das ist richtig. Unter der Annahme, dass der Type ein generischer Typ ist, ist genau einer von IsGenericTypeDefinition oder IsConstructedGenericType wahr. Wir können leicht von der Referenzquelle für RuntimeType (was die konkrete Implementierung von Type ist, wenn Sie das tun) GetType() oder typeof ) warum das der Fall ist:

%Vor%     
mike z 14.09.2013, 02:27
quelle

Tags und Links