Създавам метод за преобразуване на enum в приятелски низ. Удобните имена се съхраняват във файл с ресурси и подлежат на глобализация. Така че създадох два файла с ресурси: Enums.resx и Enums.pt-BR.resx, чиито ключове са името на enum, последвано от неговата стойност (т.е. DeliveryStatus_WaitingForPayment).
Това е кодът, който използвам, за да заредя ресурса и да получа съответното приятелско име за enum:
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.
какво правя грешно