2012-07-27 10 views
6

Type.GetType(), soru çözülmesi için de HashSet <T> ve Montaj Yeterlilik

Error Loading ASP.Net Profile

ben anlamıyorum Type.GetType (string typeName) davranışı karşılaştım.

bir List<int> tipini almak, bu

olarak türünü belirtmek için yeterli olduğunda System.Collections.Generic.List`1 [[System.ınt32]]

Ancak HashSet<int> için ben bu

System.Collections.Generic.HashSet`1 [[System.Int32]], System.Core, Sürüm = 4.0.0.0, Culture = nötrleştirme gibi tam tür adı belirtmelisiniz arkadaşları, PublicKeyToken b77a5c561934e089

ben montaj, sürüm, kültür, veya ortak anahtar belirteci herhangibırakırsanız

yazın çözülmezse =.

Kod

// 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"); 

Sorular

  • Neden tam HashSet<T> nitelemek gerekir ancak List<T> çoğaltmak?
  • Sürüm kalifikasyonunun belirtilmesi gerektiği göz önünde bulundurulduğunda, .NET Çalıştırıcısı 3.5 ise (HashSet<T> olan ilk) ya da .NET 4.5 gibi bir sonraki sürümde? Ne zaman çalışma zamanı tamamen Silverlight veya Mono gibi bir şeyse?
+0

(ı denemedim ama) Bu da çalışması gerekir: 'System.Collections.Generic.HashSet'1 [[System.Int32]], System.Core' –

+0

@Andrey: Bu benim beklentisi çok oldu ama bu işe yaramıyor. –

+0

bu alakalı olabilir: http://stackoverflow.com/a/2367674/39068 –

cevap

5

List<T>mscorelib yılında defined, HashSet<T>is not olduğunu. documentation uyarınca

: türü şu yürütme düzeneğinin veya Mscorlib.dll'de ise

, kendi ad ile tür adı sağlamaya yeterli bir miktardır

gelince

Geçerli çerçevede/profilde bulunmayan bir derleme için nitelikli bir tür adı sağlarsanız, ikinci sorunuzu GetType null döndürür.

(yorumlarda Jason Malinowski'nin belirttiği gibi) Type.GetType belgelerinde belirtilen öznitelikleri tüm montaj gerektiren ardındaki nedeni:

typeName ad ancak derleme adı içeriyorsa, bu Yöntem, yalnızca sıradaki nesnenin derlemesini ve Mscorlib.dll dosyasını bu sırada arar. TypeName kısmi veya eksiksiz derleme adıyla tam olarak nitelendirilmişse, bu yöntem belirtilen derlemede arar.Derlemenin güçlü bir adı varsa, tam bir derleme adı gerekir.

+0

Evet, ancak eleme ** sadece derleme ** ile çalışmıyor. Derleme, sürüm, kültür ve ortak anahtar belirteci ile hak kazanmak zorundayım. –

+0

Derlemenin tam "adı", Sürüm, Kültür, vb özelliklerini içerir. –

+0

@Jason. Ayrıca belgelere ardından, * bir tür derleme nitelikli adı düzeneğinin ekran adını ve ardından bir virgül ardından kendi ad, dahil, tip adından oluşur * Sözünü o Kültürü vb vardır gerekli http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx –