2011-06-30 25 views
13

Tüm dize kaynaklarını dll'den okuyan ve bazı tablolara ekleyen bir program yazmam gerekiyor.Tüm dizeleri resourcemanager kaynağından alın

private static IEnumerable<KeyValuePair<string,string>> getAllResources(ResourceManager resourceManager, 
     Language language) 
    { 

     ResourceSet resourceSet = resourceManager.GetResourceSet(getCulture(language), true, true); 

     IDictionaryEnumerator dictNumerator = resourceSet.GetEnumerator(); 

     // Get all string resources 
     while (dictNumerator.MoveNext()) 
     { 
      // Only string resources 
      if (dictNumerator.Value is string) 
      { 
       var key = (string)dictNumerator.Key; 
       var value = (string)dictNumerator.Value; 
       yield return new KeyValuePair<string, string>(key, value); 
      } 
     } 
    } 

Ama bunu kullanmaya başladı, ben de (dosya içeriğini okur)

Nasıl yok sayabilirsiniz bir dosya gibi ekledi, kaynaklar okur fark: Ben yöntemine sahip, yani kaynakları okur "dosya" olarak eklenen ve yalnızca dizeleri okuyan kaynaklar?

+0

Değer olarak 'cast' olarak kullanmak mümkün olmaz mıydı? –

+0

"is" yerine "as" kullanabilirim ama sorunumu çözmüyor – Oleksey

cevap

2

Bunu yapmanın bir yolu yoktur. Örneğin, Reflector üzerinden montajınızın kaynak bölümüne bir göz atın. Metin dosyanız String olarak kaydedilir. String değeri ile Metin Dosyası değeri arasında fark yoktur.

İkili dosya türleri için olduğu gibi, ikili dosyalar bir sorun olmayacak, byte [] değer olarak değil, string olacaksınız.

+0

evet, ikili dosyalar sorun değil. Sadece metin dosyaları ile ilgili sorun. Ancak Visual Studio 2010'daki kaynakları izlediğimde, bunlar "Strings" \ "Files" \ "Images" \ "Icons") ile sıralanır. Bunu nasıl yapıyorlar? – Oleksey

+0

Bunlar, Visual Studio'nun kaynak temsilidir. Kaynakları kaynak olarak yüklemek için dosyaları, resimleri ve simgeleri yerleri kullanır. Bundan sonra, sadece bitmap, string veya byte [] data ile montajınız var. – DiVan

İlgili konular