我创建一个方法来枚举转换为字符串友好。 友好的名称都存储在一个资源文件,并受到全球化。 所以,我创建了两个资源文件:Enums.resx和Enums.pt-BR.resx的键是枚举,然后它的名称是值(即DeliveryStatus_WaitingForPayment)。
这是我使用加载资源和枚举得到相应的友好名称的代码:
public static string EnumToString<T>(object obj)
{
string key = String.Empty;
Type type = typeof(T);
key += type.Name + "_" + obj.ToString();
Assembly assembly = Assembly.Load("EnumResources");
string[] resourceNames = assembly.GetManifestResourceNames();
ResourceManager = null;
for(int i = 0; i < resourceNames.Length; i++)
{
if(resourceNames[i].Contains("Enums.resources"))
{
rm = new ResourceManager(resourceNames[i], Assembly.GetExecutingAssembly());
Stream resStream = assembly.GetManifestResourceStream(resourceNames[i]);
ResourceReader reader = new ResourceReader(resStream);
IDictionaryEnumerator dict = reader.GetEnumerator();
while (dict.MoveNext())
{
string keyToCompare = dict.Key.ToString();
if (keyToCompare == key)
return dict.Value.ToString();
}
}
return obj.ToString();
}
}
此方法效果几乎是完美的,除了它忽略了的CurrentUICulture并始终从默认的资源返回的值,也就是说,即使当我使用PT-BR作为我的CurrentUICulture它将加载从Enum.resx而不是Enum.pt值-BR.resx。
我究竟做错了什么?