bei der Lösung der FrageType.GetType(), HashSet <T> und Montage Qualifikation
Ich kam über das Verhalten von Type.GetType (string Typname), die ich nicht verstehe.
Wenn immer den Typ eines List<int>
, genügt es, die Art, wie
System.Collections.Generic.List`1 [[System.Int32]]
jedoch angeben, für HashSet<int>
, muss ich einen voll qualifizierten Typnamen wie diese
System.Collections.Generic.HashSet`1 angeben [[System.Int32]], System.Core, Version = 4.0.0.0, Culture = neutr al, PublicKeyToken = b77a5c561934e089
Wenn ich auslassen jeden der Versammlung, Version, Kultur oder Public-Key-Token wird der Typ nicht gelöst.
-Code zu reproduzieren
// Returns expected type:
Type tListWorks =
Type.GetType("System.Collections.Generic.List`1[[System.Int32]]");
// Returns null:
Type tHashSetNull =
Type.GetType("System.Collections.Generic.HashSet`1[[System.Int32]]");
// Returns expected type:
Type tHashSetWorks =
Type.GetType("System.Collections.Generic.HashSet`1[[System.Int32]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
// Returns null (omitted Culture):
Type tHashSetNoCultureFails =
Type.GetType("System.Collections.Generic.HashSet`1[[System.Int32]], System.Core, Version=4.0.0.0, PublicKeyToken=b77a5c561934e089");
Fragen
- Warum muss ich
HashSet<T>
voll qualifizieren, aber nichtList<T>
? - Vorausgesetzt, dass die Version Qualifikation angegeben werden muss, was ist, wenn die .NET-Laufzeit 3.5 (erste, die
HashSet<T>
hatte) oder eine spätere wie .NET 4.5? Was, wenn die Laufzeit etwas ganz anderes ist als Silverlight oder Mono?
Dies sollte auch arbeiten (obwohl ich nicht versucht haben): 'System.Collections.Generic.HashSet'1 [[System.Int32]], System.Core' –
@Andrey: Das war auch meine Erwartung , aber das funktioniert nicht. –
Dies könnte relevant sein: http://StackOverflow.com/A/2367674/39068 –