属性描述

定义为PropertyInfo的扩展方法

/// <summary>
/// 获取属性描述
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
public static string GetDesc(this PropertyInfo t)
{string des = ((DescriptionAttribute)Attribute.GetCustomAttribute(t, typeof(DescriptionAttribute)))?.Description ?? null;// 属性描述return des;
}

属性相关操作

是否拥有某属性,获取某属性值,设置某属性值,是否拥有某字段,获取某字段值,设置某字段值,获取实体层描述

private static BindingFlags _bindingFlags { get; }= BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static;
/// <summary>
/// 是否拥有某属性
/// </summary>
/// <param name="obj"> 对象 </param>
/// <param name="propertyName"> 属性名 </param>
/// <returns> </returns>
public static bool ContainsProperty(this object obj, string propertyName)
{return obj.GetType().GetProperty(propertyName, _bindingFlags) != null;
}/// <summary>
/// 获取某属性值
/// </summary>
/// <param name="obj"> 对象 </param>
/// <param name="propertyName"> 属性名 </param>
/// <returns> </returns>
public static object GetPropertyValue(this object obj, string propertyName)
{return obj.GetType().GetProperty(propertyName, _bindingFlags).GetValue(obj);
}/// <summary>
/// 设置某属性值
/// </summary>
/// <param name="obj"> 对象 </param>
/// <param name="propertyName"> 属性名 </param>
/// <param name="value"> 值 </param>
/// <returns> </returns>
public static void SetPropertyValue(this object obj, string propertyName, object value)
{obj.GetType().GetProperty(propertyName, _bindingFlags).SetValue(obj, value);
}/// <summary>
/// 是否拥有某字段
/// </summary>
/// <param name="obj"> 对象 </param>
/// <param name="fieldName"> 字段名 </param>
/// <returns> </returns>
public static bool ContainsField(this object obj, string fieldName)
{return obj.GetType().GetField(fieldName, _bindingFlags) != null;
}/// <summary>
/// 获取某字段值
/// </summary>
/// <param name="obj"> 对象 </param>
/// <param name="fieldName"> 字段名 </param>
/// <returns> </returns>
public static object GetGetFieldValue(this object obj, string fieldName)
{return obj.GetType().GetField(fieldName, _bindingFlags).GetValue(obj);
}/// <summary>
/// 设置某字段值
/// </summary>
/// <param name="obj"> 对象 </param>
/// <param name="fieldName"> 字段名 </param>
/// <param name="value"> 值 </param>
/// <returns> </returns>
public static void SetFieldValue(this object obj, string fieldName, object value)
{obj.GetType().GetField(fieldName, _bindingFlags).SetValue(obj, value);
}/// <summary>
/// 获取某字段值
/// </summary>
/// <param name="obj"> 对象 </param>
/// <param name="methodName"> 方法名 </param>
/// <returns> </returns>
public static MethodInfo GetMethod(this object obj, string methodName)
{return obj.GetType().GetMethod(methodName, _bindingFlags);
}
/// <summary>
/// 获取实体层描述
/// </summary>
/// <param name="value"> </param>
/// <param name="Name"> </param>
/// <returns> </returns>
public static string GetEntityDescription(this Type value, string Name)
{PropertyDescriptor s = TypeDescriptor.GetProperties(value)[Name];DescriptionAttribute description = s == null ? null : s.Attributes[typeof(DescriptionAttribute)] as DescriptionAttribute;return description == null ? "" : description.Description;
}/// <summary>
/// 获取实体层描述
/// </summary>
/// <param name="s"> </param>
/// <returns> </returns>
public static string GetEntityDescription(this PropertyDescriptor s)
{DescriptionAttribute description = s == null ? null : s.Attributes[typeof(DescriptionAttribute)] as DescriptionAttribute;return description == null ? "" : description.Description;
}

枚举描述

定义为扩展方法

  /// <summary>/// 获取枚举描述/// </summary>/// <param name="value"> 枚举值 </param>/// <returns> </returns>public static string GetDescription(this Enum value){DescriptionAttribute attribute = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false).SingleOrDefault() as DescriptionAttribute;return attribute == null ? value.ToString() : attribute.Description;}/// <summary>/// 知道枚举,传入枚举英文,获取描述/// </summary>/// <param name="value"> </param>/// <param name="Name"> </param>/// <returns> </returns>public static string GetDescription(this Type value, string Name){DescriptionAttribute attribute = value.GetField(Name).GetCustomAttributes(typeof(DescriptionAttribute), false).SingleOrDefault() as DescriptionAttribute;return attribute == null ? value.ToString() : attribute.Description;}

C# .NET Core获取类属性/属性值,是否有属性/属性值,获取实体层描述,枚举描述,枚举英文获取枚举描述[Description(“xxx“)]相关推荐

  1. java反射怎么获取结构体_java反射-使用反射获取类的所有信息

    在OOP(面向对象)语言中,最重要的一个概念就是:万事万物皆对象. 在java中,类也是一个对象,是java.lang.Class的实例对象,官网称该对象为类的类类型. Class 类的实例表示正在运 ...

  2. java element 获取属性_java 获取类,属性变量,方法,方法参数上注解的值等

    一:获取类上注解的值 定义注解@Target(ElementType.TYPE)用于类,接口等 @Target(ElementType.TYPE) @Retention(RetentionPolicy ...

  3. Java通过反射获取类的属性值

    一 概述 每个定义的类都是java.lang.Class的实例对象,Java在运行时,只会生成一个Class对象.对于关键字new创建的对象为静态加载的对象,而在编译时就应该将所有可能用到的类都加载. ...

  4. python 简洁优雅的装饰数据类——dataclass(通过生成只有部分属性值的子类解决初始化时没有默认值必须传所有字段值的问题)

    首先安利一下 dataclass 给不太了解这个东西的小伙伴 分享一个写的不错的入门文章: 理解 Python 的 Dataclasses(一)(10min 左右即可看完) 我这里直接举一个栗子如下, ...

  5. Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)

    1.创建类的代码: #在Java中,所有的最终父类都是Object #在python中也是,一个类没有直接的父类就写入objectclass Animal(object):#在python中init方 ...

  6. python的类里的属性是否可以为列表_Python中如何获取类属性的列表

    前言 最近工作中遇到个需求是要得到一个类的静态属性,也就是说有个类 Type ,我要动态获取 Type.FTE 这个属性的值. 最简单的方案有两个: getattr(Type, 'FTE') Type ...

  7. python获取类的类属性_Python中如何获取类属性的列表

    前言 最近工作中遇到个需求是要得到一个类的静态属性,也就是说有个类 Type ,我要动态获取Type.FTE这个属性的值. 最简单的方案有两个: getattr(Type, 'FTE') Type._ ...

  8. php类3个属性是哪3种,PHP获取类私有属性的3种方法

    今天在推上看到一条获取php类私有属性的推文,感觉很有意思: 顺着推文联想,还有其他方式吗?经过自己的测试及网上答案,总结出三种方法: 1. 反射 反射可以获取类的详细信息,要获取私有属性的值,只需将 ...

  9. java 获取类的注解_Java 自定义注解通过反射获取类、方法、属性上的注解

    反射 JAVA中的反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变.通俗的讲就是反射可以在运行时根据指定的类名获得类的信息. 注解的定义 注解通过 @interface 关键 ...

最新文章

  1. (组合)Binomial Showdown
  2. CentOS iso镜像文件做本地源
  3. 【SPSS】第十周-面板数据的线性回归
  4. 微信小程序常见错误及基本排除方法
  5. tensorflow--forword(前向传播)
  6. golang控制台颜色输出(for windows)
  7. powerdesigner安装之后会自动加载到word中怎么去除??
  8. BZOJ4559 JLOI2016成绩比较(容斥原理+组合数学+斯特林数)
  9. selenium1和2区别
  10. 购买namesilo域名可以用微信支付了
  11. Unicode编码的字块,Unicode不同范围对应的不同语言的字符集
  12. ap位置服务器怎么找,如何正确选择无线AP的安装位置?
  13. MySQL中emoji表情包的存储问题
  14. 超分辨率:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network论文翻译
  15. 通过IP查找ip所对应网卡名
  16. shell脚本循环执行任务的脚本
  17. 转:德鲁克:管理的本质是激发善意和潜能
  18. 开发中常提到的脚手架是指的什么?
  19. Compose关于Column属性说明
  20. PLC远程监控有什么方式?如何进行远程上下载?

热门文章

  1. KiCAD电路仿真入门
  2. 网狐大联盟机器管理工具编译与使用
  3. Clickhouse LB实践
  4. Flutter 打包APK aab
  5. html 设置卯位置,周易基础知识:十二地支之卯木
  6. unity制作愤怒的小鸟笔记
  7. 魅族mx1Android4.4,魅族MX如何升级安卓4.0
  8. Linux 学习笔记 三
  9. 理解Profiles, Services,Characteristics,UUID等值
  10. 收集得最全的sql 语句