当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/375164.html

相关文章:

  • 多态深度剖析
  • OSPF被动接口配置(华为)
  • Android --- 异步操作
  • (55)MOS管专题--->(10)MOS管的封装
  • 超高清图像生成新SOTA!清华唐杰教授团队提出Inf-DiT:生成4096图像比UNet节省5倍内存。
  • 网络安全 - DNS劫持原理 + 实验
  • MyBatis的运行原理
  • 算法题解记录29+++全排列(百日筑基)
  • 苹果AI功能,AI训练数据缺乏,SD3推出,MJ6推出新特性
  • 超越中心化:Web3如何塑造未来数字生态
  • 【ic-tool】timegen使用
  • 1:25万基础电子地图(云南版)
  • springboot宠物领养系统-计算机毕业设计源码07863
  • 牛客热题:最长回文子串
  • 如何访问寄存器
  • 苍穹外卖笔记-18-修改密码、bug记录
  • java如何截取字符串
  • 虚拟淘宝-Virtual-Taobao论文解读(AAAI2019)
  • 低代码组件扩展方案在复杂业务场景下的设计与实践
  • 震撼科技界的GPT-4o发布首日即遭“越狱破防”
  • 保护密码安全,探讨密码加盐及其在Go语言中的实现
  • Sqoop学习详细介绍!!
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 生成哈夫曼树(100分) - 三语言AC题解(Python/Java/Cpp)
  • ctfshow web 单身杯
  • 天锐绿盾加密软件,它的适用范围是什么?
  • mysql面试题 Day2
  • Excel加密怎么设置?这5个方法不容错过!(2024总结)
  • 2024年下一个风口是什么?萤领优选 轻资产创业项目全国诚招合伙人
  • Redis 网络模型
  • 【设计模式之组合模式 -- C++】