111,119
社区成员
发帖
与我相关
我的任务
分享public enum CustomStatus
{
/// <summary>
/// 草稿状态
/// </summary>
Draft = 0,
/// <summary>
/// 已提交,待审批完成
/// </summary>
Wait = 5,
/// <summary>
/// 审批通过
/// </summary>
Agree = 10,
/// <summary>
/// 审批拒绝
/// </summary>
Reject = 15
}
public class Demo
{
public CustomStatus Status{get;set;}
public string CustomStatusDisplay{
get
{
switch (this.Status)
{
case CustomStatus .Draft:
return "草稿";
case CustomStatus .Wait:
return "待审批";
case CustomStatus .Agree:
return "审批通过";
case CustomStatus .Reject:
return "审批拒绝";
default:
return "未知状态";
}
}
}
} /// <summary>
/// Enum 绑定 Attribute
/// </summary>
/// <typeparam name="EnumType"></typeparam>
/// <typeparam name="AttributeType"></typeparam>
public struct EnumAttribute<EnumType, AttributeType>
where EnumType : IConvertible
where AttributeType : Attribute
{
private EnumType enumValue;
public EnumType EnumValue
{
get { return enumValue; }
set
{
this.enumValue = value;
set();
}
}
public AttributeType AttributeValue { get; private set; }
public static implicit operator EnumAttribute<EnumType, AttributeType>(EnumType enumValue)
{
return new EnumAttribute<EnumType, AttributeType>(enumValue);
}
public static implicit operator EnumType(EnumAttribute<EnumType, AttributeType> value)
{
return value.EnumValue;
}
public EnumAttribute(EnumType enumValue, AttributeType defaultAttribute = null)
{
this.enumValue = enumValue;
AttributeValue = defaultAttribute;
set();
}
private void set()
{
#region 这里只是示例,这一段自己做优化
FieldInfo field = typeof(EnumType).GetField(EnumValue.ToString(), BindingFlags.Public | BindingFlags.Static);
if (field != null)
{
foreach (object attribute in field.GetCustomAttributes(typeof(AttributeType), false))
{
AttributeValue = attribute as AttributeType;
break;
}
}
#endregion
}
}定义一个自定义属性用于描述 Enum public enum CustomStatus
{
/// <summary>
/// 草稿状态
/// </summary>
[CustomStatusAttribute(Display = "草稿")]
Draft = 0,
/// <summary>
/// 已提交,待审批完成
/// </summary>
[CustomStatusAttribute(Display = "待审批")]
Wait = 5,
/// <summary>
/// 审批通过
/// </summary>
[CustomStatusAttribute(Display = "审批通过")]
Agree = 10,
/// <summary>
/// 审批拒绝
/// </summary>
[CustomStatusAttribute(Display = "审批拒绝")]
Reject = 15
}
public sealed class CustomStatusAttribute : Attribute
{
public string Display;
public static readonly CustomStatusAttribute Null = new CustomStatusAttribute { Display = "未知状态" };
} public class Demo
{
public EnumAttribute<CustomStatus, CustomStatusAttribute> Status { get; set; } = CustomStatus.Agree;
}
public enum CustomStatus
{
/// <summary>
/// 草稿状态
/// </summary>
Draft = "草稿",
/// <summary>
/// 已提交,待审批完成
/// </summary>
Wait = "已提交",
/// <summary>
/// 审批通过
/// </summary>
Agree = "审批通过",
/// <summary>
/// 审批拒绝
/// </summary>
Reject = "审批拒绝"
}
然后用调用ToString就可以得到你要的字符了。
public static class Utils
{
public static string GetEnumDescription<T>(T value)
{
var type = typeof(T);
var name = Enum.GetName(type, value);
if (name == null)
return null;
var memberInfo = type.GetMember(name);
if (memberInfo.Length != 0)
{
var attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs.Length != 0)
{
var attr = attrs[0] as DescriptionAttribute;
if (attr != null)
return attr.Description;
}
}
return null;
}
}
public enum CustomStatus
{
[Description("草稿状态")]
Draft = 0,
[Description("已提交,待审批完成")]
Wait = 5,
[Description("审批通过")]
Agree = 10,
[Description("审批拒绝")]
Reject = 15
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Utils.GetEnumDescription(CustomStatus.Draft)); // 输出就是“草稿状态”
}
}
public enum CustomStatus
{
/// <summary>
/// 草稿状态
/// </summary>
草稿 = 0,
/// <summary>
/// 已提交,待审批完成
/// </summary>
待审批 = 5,
/// <summary>
/// 审批通过
/// </summary>
审批通过 = 10,
/// <summary>
/// 审批拒绝
/// </summary>
审批拒绝 = 15
}