den folgenden Code Gegeben:Wie unterscheidet man die Typen: Int32 [] & Int32 [*]?
var type1 = typeof(int[]); // Int32[]
var type2 = Array.CreateInstance(elementType: typeof(int),
lengths: new [] {0},
lowerBounds: new []{1}).GetType(); // Int32[*]
ein Array-Typ (ein Typ, wo .IsArray true zurück) Da, wie kann ich zwischen diesen beiden Arten von Array-Typen zuverlässig differenciate?
Ohne hacky Lösungen vorzugsweise zu verwenden (wie instanziieren des Typs oder Suchen nach "*" im Namen).
Kontext: Ich baue einen Serialisierer und ich brauche das für jeden Typ, den es gibt, also konstante Vergleiche wie == typeof (int []) wird nicht funktionieren.
'type.IsArray!? "Nicht Array": type.GetArrayRank()> 1? "Mehrdimensionales Array": type == type.GetElementType(). MakeArrayType()? "Nullbasiertes Array": "Nicht nullbasiertes Array" – PetSerAl
Eine Frage wie diese benötigt ein wenig mehr Kontext, ich würde niemals einen Stringvergleich auf den Typnamen empfehlen, aber die offensichtliche Antwort auf Ihre Frage ist type2! = typeof (int []). Wenn wir mehr Kontext darüber haben, woher diese Typen oder Variablen stammen (nur ein paar einfache Informationen), können wir Ihnen möglicherweise einige wirklich nützliche Antworten geben. –
@PetSerAl Das ist eine brillante Antwort! Vielen Dank, ich werde es gleich ausprobieren. & Chris Schaller Ich baue einen Serialisierer und ich brauche es für jeden Typ, so dass eine ständige Überprüfung auf typeof (int []) nicht funktioniert, ich füge das zu meiner Frage hinzu. – hl3mukkel