2016-05-14 23 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; 
相关问题