在实际开发过程中,我们常常会用到枚举类,使用枚举的时候往往有着各种使用条件,如何给枚举加入使用条件呢?
答案就是我们的——自定义属性
废话不多说,上代码
枚举类
首先我们要有一个枚举类
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)
:指示是否有任何自定义属性应用于此字段。