Thay thế phương thức @ nairik bằng các phương thức sau để thêm hỗ trợ cho cờ enums.
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();
}
và thay thế NameResourceType trong các thuộc tính:
public Type NameResourceType
{
get
{
return _resourceType;
}
set
{
_resourceType = value;
_nameProperty = _resourceType.GetProperty(base.Description, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
}
}
một Enum không phải là một điều tra viên, phải không? Đó là một loại liệt kê, nhưng một điều tra là một cái gì đó khá khác nhau tôi tin rằng ... – Svish
Sử dụng C# 3.5 bạn có thể làm cho phương pháp đó một phương pháp mở rộng để sau đó bạn có thể sử dụng SomeEnum.Large.EnumDescription(); –
Chỉ cần vấp phải câu hỏi này khi tìm kiếm một vấn đề khác. Tôi chỉ nhắc nhở rằng việc sử dụng tên và tên thành viên làm cho ứng dụng của bạn khó khăn hơn để làm xáo trộn (bạn phải loại trừ khai báo hợp lý khỏi quá trình này). –