如何从.NET资源(RESX)文件中获取字符串值

这是我的RESX文件的样子:

Name Value Comments Rule_seconds seconds seconds Rule_Sound Sound Sound 

我想要的是:按字符串名称值,如下所示:

 public string GetResxNameByValue(string value) { // some code to get name value } 

并按如下方式实现:

 string str = GetResxNameByValue("seconds"); 

这样str将返回Rule_seconds

谢谢!

这可行

 private string GetResxNameByValue(string value) { System.Resources.ResourceManager rm = new System.Resources.ResourceManager("YourNamespace.YourResxFileName", this.GetType().Assembly); var entry= rm.GetResourceSet(System.Threading.Thread.CurrentThread.CurrentCulture, true, true) .OfType() .FirstOrDefault(e => e.Value.ToString() ==value); var key = entry.Key.ToString(); return key; } 

有一些额外的错误检查..

您可以通过密钥直接访问:

  public string gtresource(string rulename) { string value = null; System.Resources.ResourceManager RM = new System.Resources.ResourceManager("CodedUITestProject1.Resource1", this.GetType().Assembly); value = RM.GetString(rulename).ToString(); if(value !=null && value !="") { return value; } else { return ""; } } 

以防它可以帮助任何人。 这个ResourceHelper的灵感来自于jure和Mohan Singh Saini 。

 using System.Collections; using System.Linq; using System.Reflection; using System.Resources; using System.Threading; public class ResourceHelper { ///  /// ResourceHelper ///  /// ie "Namespace.ResourceFileName" /// ie GetType().Assembly if working on the local assembly public ResourceHelper(string resourceName, Assembly assembly) { ResourceManager = new ResourceManager(resourceName, assembly); } private ResourceManager ResourceManager { get; set; } public string GetResourceName(string value) { DictionaryEntry entry = ResourceManager.GetResourceSet(Thread.CurrentThread.CurrentCulture, true, true).OfType().FirstOrDefault(dictionaryEntry => dictionaryEntry.Value.ToString() == value); return entry.Key.ToString(); } public string GetResourceValue(string name) { string value = ResourceManager.GetString(name); return !string.IsNullOrEmpty(value) ? value : null; } } 
 public static class ResourceManagerHelper { public static string GetResourceName(this ResourceManager resourceManager, string value, CultureInfo cultureInfo, bool ignoreCase = false) { var comparisonType = ignoreCase ? System.StringComparison.OrdinalIgnoreCase : System.StringComparison.Ordinal; var entry = resourceManager.GetResourceSet(cultureInfo, true, true) .OfType() .FirstOrDefault(dictionaryEntry => dictionaryEntry.Value.ToString().Equals(value, comparisonType)); if (entry.Key == null) throw new System.Exception("Key and value not found in the resource file"); return entry.Key.ToString(); } } 

要调用此扩展方法,

 var key = Resources.ResourceManager.GetResourceName(value, CultureInfo.InvariantCulture, true); 

在这种情况下,我们不想传递资源程序集,而是可以使用特定资源的resourceManager调用。

你可以使用这个内联代码(c#,ASP.NET MVC)

 var _resource = new ResourceManager(typeof(/*your resource*/)); string res = _resource.GetString(/*resource key*/); 

我想这可以帮到你。

这是一个有限的例子:

  • 使用子文件夹中的资源文件
  • 使用与默认文化不同的文化

 public static string GetLocalizedNameReversed(string value) { ResourceManager rm = new ResourceManager($"YourNamespace.YourFolder.YourResourceFileName", assembly); var entry = rm.GetResourceSet(new CultureInfo("nb-NO"), true, true) .OfType() .FirstOrDefault(e => e.Value.ToString().Equals(value, StringComparison.OrdinalIgnoreCase)); return entry.Key.ToString(); }