在实际开发过程中,我们常常会用到枚举类,使用枚举的时候往往有着各种使用条件,如何给枚举加入使用条件呢?
答案就是我们的——自定义属性
废话不多说,上代码
枚举类
首先我们要有一个枚举类
public enum XXXX枚举类名称
{// IsShow 是自定义属性[IsShow(true)]aa = 1,[IsShow(false)]aa = 2}
自定义属性 类
自定义属性 类,有了这个类,我们就可以在 枚举类上 使用我们的自定义属性
public class IsShowAttribute : Attribute
{public Boolean Data{get;set}//有参构造函数public IsShowAttribute(bool data){Data = data}//无参构造函数public IsShowAttribute(){}}
使用方法
我们这里的 自定义属性是 “是否展示”,我们使用方法来 取出枚举类型,自己定义一个工具类,在工具类中去加入下面的代码。
public static bool ToXXXX(this Enum value)
{if(value==null){return 自己的逻辑(如果你的value是空,就返回true/false)}FieldInfo fieldInfo = value.GetType().GetField(value.ToString());if(fieldInfo == null){return ture;}object [] attribArray = fieldInfo.GetCustomAttributes(typeof(IsShowAttribute),false);if(attribArray.Length ==0){return true;}else{return (attribArray[0] as IsShowAttribute).Data;}}
结果
if(工具类.ToXXXX(枚举类(枚举值)))
{自己的逻辑
}
结果就是 aa = 1 展示,而bb = 2 不展示
FieldInfo
FieldInfo
是 .NET 框架中的一个类,用于描述字段的信息。它是反射(Reflection)的一部分,允许你在运行时获取关于字段的元数据(例如字段名称、类型、修饰符等),并对字段进行操作(例如获取或设置字段的值)
FieldInfo
的常用属性和方法
常用属性
Attributes
:获取字段的属性。FieldHandle
:获取字段的句柄。FieldType
:获取字段的类型。IsAssembly
:指示字段是否具有Assembly
可见性。IsFamily
:指示字段是否具有Family
可见性。IsFamilyAndAssembly
:指示字段是否具有FamilyAndAssembly
可见性。IsFamilyOrAssembly
:指示字段是否具有FamilyOrAssembly
可见性。IsInitOnly
:指示字段是否为只读。IsLiteral
:指示字段是否具有常量值。IsPrivate
:指示字段是否为私有。IsPublic
:指示字段是否为公共。IsSpecialName
:指示字段是否具有特殊名称。MemberType
:获取此成员的类型。Name
:获取此字段的名称。ReflectedType
:获取声明该字段的类。
常用方法
GetValue(object obj)
:返回字段的值。SetValue(object obj, object value)
:设置字段的值。SetValue(object obj, object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture)
:设置字段的值,使用指定的绑定约束。GetCustomAttributes(bool inherit)
:返回一个数组,该数组包含应用于此字段的所有自定义属性。GetCustomAttributes(Type attributeType, bool inherit)
:返回一个数组,该数组包含应用于此字段的指定类型的自定义属性。IsDefined(Type attributeType, bool inherit)
:指示是否有任何自定义属性应用于此字段。