列挙型をわかりやすい文字列に変換するメソッドを作成しています。フレンドリ名はリソースファイルに保存され、グローバリゼーションの対象となります。そこで、2つのリソースファイルを作成しました。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を無視し、常にデフォルトリソースから値を返すことを除いて、ほぼ完全に機能します。つまり、CurrentUICultureとしてpt-BRを使用している場合でも、Enum.ptではなくEnum.resxから値をロードします。 -BR.resx。
私は何が間違っているのですか?