C#中的枚举类-自定义属性

在实际开发过程中,我们常常会用到枚举类,使用枚举的时候往往有着各种使用条件,如何给枚举加入使用条件呢?

答案就是我们的——自定义属性

废话不多说,上代码

枚举类

首先我们要有一个枚举类

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):指示是否有任何自定义属性应用于此字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值