Zamień metodę @ nairik na następującą, aby dodać obsługę znaczników flagi.
public static string GetLocalizedDescription(this Enum @enum)
{
if (@enum == null)
return null;
StringBuilder sbRet = new StringBuilder();
string description = @enum.ToString();
var fields = description.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var field in fields)
{
FieldInfo fieldInfo = @enum.GetType().GetField(field);
DescriptionAttribute[] attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes.Any())
sbRet.AppendFormat("{0}, ", attributes[0].Description);
else
sbRet.AppendFormat("{0}, ", field);
}
if (sbRet.Length > 2)
sbRet.Remove(sbRet.Length - 2, 2);
return sbRet.ToString();
}
i zastąpić NameResourceType w atrybucie:
public Type NameResourceType
{
get
{
return _resourceType;
}
set
{
_resourceType = value;
_nameProperty = _resourceType.GetProperty(base.Description, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
}
}
Enum nie jest modułem wyliczającym, prawda? Jest to typ wyliczeniowy, ale moduł wyliczający jest czymś zupełnie innym, jak sądzę ... – Svish
Używając C# 3.5 można uczynić tę metodę metodą rozszerzenia, aby można było następnie użyć SomeEnum.Large.EnumDescription(); –
Natknąłem się na to pytanie, szukając innego problemu. Przypominam tylko, że używanie nazwy typu i nazwiska utrudnia utrudnianie aplikacji (należy wykluczyć sensowną deklarację z procesu). –