C#/.NET 枚举特性扩展——系统特性及自定义特性

【C#高级语法特性锦集】

https://blog.csdn.net/qq_34202873/article/details/91043366


C#枚举特性扩展——系统特性及自定义特性


系统自带的特性

public static class EnumHelperExtensions
{
	public static List<T> GetAllEnumMembers<T>()
	{
		if (!typeof(T).IsEnum)
		{
			throw new Exception("Only support Enum!");
		}

		List<T> list = new List<T>();
		T t = default(T);
		foreach (var m in Enum.GetValues(t.GetType()))
		{
			list.Add((T)m);
		}
		return list;
	}

	public static string GetDescription(this Enum source)
	{
		string description = null;
		Type type = source.GetType();
		FieldInfo[] fields = type.GetFields();
		var attr = (DescriptionAttribute[])(fields.First(x => x.Name == source.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false));
		if (attr != null && attr.Length != 0)
		{
			description = attr[0].Description;
		}
		return description;
	}
}

public enum AxisTypes
{
	[Description("X轴")]
	AxisX,
	AxisY,
	AxisZ,
	AxisW
}
//调用
private string GetAxisDescription(AxisTypes type)
{
	//return type.GetDescription();
	return AxisTypes.AxisX.GetDescription();
}

自定义扩展的特性

[AttributeUsage(AttributeTargets.Enum | AttributeTargets.Field)]
public class RemarkAttribute : Attribute
{
	public RemarkAttribute(int remark)
	{
		this.Remark = remark;
	}

	public int Remark { get; private set; }
}

public static class RemarkExtend
{
	/// <summary>
	/// 扩展方法
	/// </summary>
	/// <param name="enumValue"></param>
	/// <returns></returns>
	public static int GetRemark(this Enum enumValue)
	{
		Type type = enumValue.GetType();
		FieldInfo field = type.GetField(enumValue.ToString());
		if (field.IsDefined(typeof(RemarkAttribute), true))
		{
			RemarkAttribute remarkAttribute = (RemarkAttribute)field.GetCustomAttribute(typeof(RemarkAttribute));
			return remarkAttribute.Remark;
		}
		else
		{
			return Convert.ToInt32(enumValue);
		}
	}
}
public enum MotionTypes
{
	[Remark(0)]
	Continuous,
	[Remark(1)]
	Step
}
//调用
private string GetMotionRemark(MotionTypes type)
{
	//return type.GetRemark();
	return AxisTypes.Continuous.GetRemark();
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老陈聊架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值