我有一个.resx
文件,其中包含我网站的所有字符串。我想创建List<string>
这些字符串的子集,而不必对每个新字符串使用add()
,如下所示:
List<string> listOfResourceStrings= new List<string>();
listOfResourceStrings.Add(Resources.WebSite_String1);
listOfResourceStrings.Add(Resources.WebSite_String2);
listOfResourceStrings.Add(Resources.WebSite_String3);
listOfResourceStrings.Add(Resources.WebSite_String4);
listOfResourceStrings.Add(Resources.WebSite_String5);
listOfResourceStrings.Add(Resources.WebSite_Stringn);
我可以用......
System.Resources.ResourceSet listOfResourceStrings = Resources.ResourceManager.GetResourceSet(System.Threading.Thread.CurrentThread.CurrentCulture, true, true);
...但这会返回ResourceSet
并包含所有字符串。并且,似乎没有一种简单的方法来查找字符串的子集。
感谢您的帮助,
亚伦
答案 0 :(得分:0)
资源数据存储在静态属性中,因此可以使用反射根据属性名称选择性地提取属性值。
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text.RegularExpressions;
namespace ConsoleApplication9
{
public class Program
{
public static void Main(String[] args)
{
var strings = GetStringPropertyValuesFromType(typeof(Properties.Resources), @"^website_.*");
foreach (var s in strings)
Console.WriteLine(s);
}
public static List<String> GetStringPropertyValuesFromType(Type type, String propertyNameMask)
{
var result = new List<String>();
var propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
var regex = new Regex(propertyNameMask, RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach (var propertyInfo in propertyInfos)
{
if (propertyInfo.CanRead &&
(propertyInfo.PropertyType == typeof(String)) &&
regex.IsMatch(propertyInfo.Name))
{
result.Add(propertyInfo.GetValue(type, null).ToString());
}
}
return result;
}
}
}