2016-05-14 26 views
0

您可以通過以下得到的資源鍵的值:如何從本地化的字符串值獲取資源的密鑰?

string s = Namespace.ResourceLocation.ResourceFile.KeyName; 

有沒有一種方式來獲得一個字符串值的鍵名?

+0

查找在字典值鍵不保證唯一的結果......你能不能請你澄清你爲什麼需要呢? (可能只是使用資源名稱而不是預編譯訪問器在你的情況下會更好)。 –

+0

這是一個奇怪的球情況。有許多不同的翻譯代碼,但是數據是通過英國英語價值引入系統的 - 然後數據需要以選定的最終用戶語言顯示。顯示數據的最佳方式是使用資源文件 - 只有在引入階段我才能查找原始代碼。在這種情況下,他們被保證是唯一的 – RemarkLima

+0

如果你從字符串開始,你爲什麼要嘗試一些奇怪的操作,而不是僅僅通過該值獲取資源字符串? (http://stackoverflow.com/questions/7644796/read-value-from-resource-file-using-string) –

回答

1

您可以迭代資源文件並使用該值獲取鍵名。

using System.Resources; 
using (ResXResourceReader oReader = new ResXResourceReader(ResourceFilePath)) 
{ 
     IDictionaryEnumerator oResource = oReader.GetEnumerator(); 
     while (oResource.MoveNext()) 
     { 
      if (oResource.Value.ToString() == "VALUE") 
       return oResource.Key.ToString(); 
     } 
} 
+1

這裏只是一個註釋 - 如果resx文件被編譯到程序集中,這不起作用 - 物理resx文件在發佈時需要保留爲項目的一部分。 – RemarkLima

+0

@RemarkLima很高興知道謝謝 –

0

爲了完整起見,從inquisitive_mind的答案,我結束了:

var resDict = StronglyTypedResource 
        .ResourceManager 
        .GetResourceSet(CultureInfo.InvariantCulture, true, false) 
         .Cast<DictionaryEntry>() 
         .ToDictionary(x => x.Key.ToString(), x => x.Value.ToString()); 

爲了讓我的強類型的資源文件轉換成字典 - 我最初錯過了位是使createIfNotExists加載資源文件。

然後只需查詢字典:

entity.ResourceKeyValue = 
    resDict.First(x => x.Value.ToLower() == stringValue.Trim().ToLower()).Key; 
相關問題