一、C#获取特性(坑)
一、C#获取特性(坑)
[Description("系统状态码")]
[Display(Name = "成功", Description = "请求成功!")]
Success = 0,
[Description("系统状态码")]
[Display(Name = "成功", Description = "请求错误!")]
err= 0,
当你
var s=SatausCode.CommonCodeEnum.err.GetDisplayDescription(); //获取err特性 但是因为都是0,那么就匹配第一个特性的,而不是根据我err 来的, 因为 我很多的时候就会使用到200 各位


--
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Reflection; namespace Test
{ class Program
{ static void Main(string[] args)
{
var s=SatausCode.CommonCodeEnum.GetReqCreditDatalOK.GetDisplayDescription();
} } public static class SatausCode
{
public enum CommonCodeEnum
{
/// <summary>
/// 成功
/// </summary>
[Description("系统状态码")]
[Display(Name = "成功", Description = "请求成功!")]
Success = , /// <summary>
/// 系统状态码
/// </summary>
[Description("系统状态码")]
[Display(Name = "失败", Description = "请求失败!")]
Error = , /// <summary>
/// 验签状态码
/// </summary>
[Description("验签状态码")]
[Display(Name = "部分参数不完整", Description = "部分参数不完整!")]
Incomplete = , /// <summary>
/// 系统状态码
/// </summary>
[Description("系统状态码")]
[Display(Name = "内部服务异常", Description = "内部服务异常!")]
Ex = , /// <summary>
/// 系统状态码
/// </summary>
[Description("验签状态码")]
[Display(Name = "timeStamp参数异常", Description = "timeStamp参数异常!")]
TimeStamp_Str = , /// <summary>
/// 系统状态码
/// </summary>
[Description("验签状态码")]
[Display(Name = "请求超时", Description = "请求超时!")]
Timeout = , /// <summary>
/// 系统状态码
/// </summary>
[Description("验签状态码")]
[Display(Name = "用户权限限制", Description = "用户权限限制!")]
Power = , /// <summary>
/// 系统状态码
/// </summary>
[Description("验签状态码")]
[Display(Name = "签名不合法", Description = "签名不合法!")]
Sign = , /// <summary>
/// 系统状态码
/// </summary>
[Description("区分城市状态码")]
[Display(Name = "未授权此城市", Description = "未授权此城市!")]
DisArea = , /// <summary>
/// 系统状态码
/// </summary>
[Description("系统状态码")]
[Display(Name = "远程服务器返回错误: (404) 未找到。", Description = "远程服务器返回错误: (404) 未找到!")]
NoFind = , /// <summary>
/// 系统状态码
/// </summary>
[Description("系统状态码")]
[Display(Name = "远程服务器返回错误: (500) 内部服务器错误。", Description = "远程服务器返回错误: (500) 内部服务器错误。")]
NoErr = , #region 房估估
/// <summary>
/// 房估估
/// </summary>
[Description("第三方")]
[Display(Name = "查询小区/地址不能为空", Description = "查询小区/地址不能为空!")]
VillageNull = , /// <summary>
/// 房估估
/// </summary>
[Description("房估估第三方")]
[Display(Name = "小区匹配", Description = "小区数据获取成功!")]
GetVillageOk = , /// <summary>
/// 房估估 ------------报错信息 用它的 暂不使用
/// </summary>
[Description("房估估第三方")]
[Display(Name = "小区匹配", Description = "小区获取数据失败!")]
GetVillageErr = , /// <summary>
/// 房估估
/// </summary>
[Description("房估估第三方")]
[Display(Name = "房估估小区评价", Description = "小区评价数据成功!")]
GetHouseEvalOk = , /// <summary>
/// 房估估
/// </summary>
[Description("房估估第三方")]
[Display(Name = "房估估小区评价", Description = "小区评价数据成功!")]
GetHouseEvalErr = ,
#endregion #region 同盾 /// <summary>
///
/// </summary>
[Description("征信第三方")]
[Display(Name = "请求凭证无效", Description = "请求凭证无效!")]
CertErr = , /// <summary>
/// 征信
/// </summary>
[Description("征信第三方")]
[Display(Name = "请求用户数据", Description = "请求用户数据成功!")]
GetReqCreditDatalOK = , /// <summary>
/// 征信
/// </summary>
[Description("征信第三方")]
[Display(Name = "请求用户数据", Description = "请求用户数据失败!")]
GetReqCreditDatalErr = , /// <summary>
/// 征信
/// </summary>
[Description("征信第三方")]
[Display(Name = "获取用户数据", Description = "获取用户数据成功!")]
GetCreditDataOK = , /// <summary>
/// 征信
/// </summary>
[Description("征信第三方")]
[Display(Name = "获取用户数据", Description = "获取用户数据失败!")]
GetCreditDataErr = , /// <summary>
/// 征信
/// </summary>
[Description("征信第三方")]
[Display(Name = "获取详情成功", Description = "获取详情成功!")]
GetCreditDetailOK = , /// <summary>
/// 征信
/// </summary>
[Description("征信第三方")]
[Display(Name = "小区地址有误", Description = "小区地址有误!")]
Getvillage = , /// <summary>
/// 征信
/// </summary>
[Description("征信第三方")]
[Display(Name = "获取数据详情", Description = "获取数据详情失败!")]
GetCreditDetailErr = , /// <summary>
/// 征信
/// </summary>
[Description("征信第三方")]
[Display(Name = "请求数据", Description = "请求数据详情成功!")]
GetReqCreditDetailOK = , /// <summary>
/// 征信
/// </summary>
[Description("征信第三方")]
[Display(Name = "请求数据", Description = "请求数据详情失败!")]
GetReqCreditDetailErr = , #endregion #region 房估估验证
/// <summary>
/// 系统状态码
/// </summary>
[Description("房估估验证")]
[Display(Name = "输入房产面积数据格式有误", Description = "输入房产面积数据格式有误!")]
Areaformat = ,
/// <summary>
/// 系统状态码
/// </summary>
[Description("房估估验证")]
[Display(Name = "输入层数据格式有误", Description = "输入层数据格式有误!")]
Floorformat = , /// <summary>
/// 系统状态码
/// </summary>
[Description("房估估验证")]
[Display(Name = "输入总楼层数据格式有误", Description = "输入总楼层数据格式有误!")]
TotalFloorformat = , /// <summary>
/// 系统状态码
/// </summary>
[Description("房估估验证")]
[Display(Name = "所在楼层大于总楼层数据有误", Description = "所在楼层大于总楼层数据有误!")]
TotalBigFloorformat = , #endregion #region 同盾验证
/// <summary>
/// 系统状态码
/// </summary>
[Description("同盾验证")]
[Display(Name = "身份证号格式不对", Description = "身份证号格式不对!")]
CardIdformat = , /// <summary>
/// 系统状态码
/// </summary>
[Description("同盾验证")]
[Display(Name = "手机号格式不对", Description = "手机号格式不对!")]
Telformat = , #endregion /// <summary>
/// 系统状态码
/// </summary>
[Description("评估")]
[Display(Name = "评估失败", Description = "评估失败!")]
EvelErr = ,
} /// <summary>
/// 获取特性 (DisplayAttribute) 的说明;如果未使用该特性,则返回枚举的名称。
/// </summary>
/// <param name="enumValue"></param>
/// <returns></returns>
public static string GetDisplayDescription(this Enum enumValue)
{
FieldInfo fieldInfo = enumValue.GetType().GetField(enumValue.ToString());
DisplayAttribute[] attrs =
fieldInfo.GetCustomAttributes(typeof(DisplayAttribute), false) as DisplayAttribute[]; return attrs.Length > ? attrs[].Description : enumValue.ToString();
} } }
二、解决方案
1、状态码(模块化区分)
/// <summary>
/// 上传状态
/// </summary>
public enum UploadState
{
[Description("上传失败")]
UploadFailed = -, [Description("正在上传")]
Uploading = , [Description("上传成功")]
UploadSuccess =
}
方法
/// <summary>
/// 获取枚举的描述
/// </summary>
/// <param name="en">枚举</param>
/// <returns>返回枚举的描述</returns>
public static string GetDescription(Enum en)
{
Type type = en.GetType(); //获取类型
MemberInfo[] memberInfos = type.GetMember(en.ToString()); //获取成员
if (memberInfos!=null&&memberInfos.Length>)
{
DescriptionAttribute[] attrs = memberInfos[].GetCustomAttributes(typeof(DescriptionAttribute), false) as DescriptionAttribute[]; //获取描述特性 if (attrs!=null&&attrs.Length>)
{
return attrs[].Description; //返回当前描述
}
}
return en.ToString();
}
调用代码
EnumService.GetDescription(UploadState.UploadSuccess)
2、指定名称获取特性描述
一、C#获取特性(坑)的更多相关文章
- C# 使用表达式树获取特性的值
一.定义特性 /// <summary> /// 定义特性 /// </summary> [AttributeUsage(AttributeTargets.Field | At ...
- C# 通过反射获取特性的值
特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签.您可以通过使用特性向程序添加声明性信息.一个声明性标签是通过放置在它所应用的元素前 ...
- c#获取特性DescriptionAttribute的值
int detailId = Convert.ToInt32(id); BillLoanApplyDetail model = _billLoadApplyDetail.GetBillLoanAppl ...
- MVC中获取模型属性的Range和StringLength验证特性设置
MVC中的客户端及服务端模型验证信息都以ModelMetadata类型作为承载,在获得属性的ModelMetadata之后(还不知道怎么获取ModelMetadata的童鞋请自行恶补),我们可以轻松得 ...
- .NET(C#):使用反射来获取枚举的名称、值和特性【转】
首先需要从内部了解一下枚举(Enumeration),相信许多人已经知道了,当我们声明一个这样的枚举类型: enumMyEnum { AAA, BBB, CCC } 背后的IL是这样的: .class ...
- .NET(C#):使用反射来获取枚举的名称、值和特性
首先需要从内部了解一下枚举(Enumeration),相信许多人已经知道了,当我们声明一个这样的枚举类型: enum MyEnum { AAA, BBB, CCC } 背后的IL是这样的: .clas ...
- JavaScript特性(attribute)、属性(property)和样式(style)
最近在研读一本巨著<JavaScript忍者秘籍>,里面有一篇文章提到了这3个概念. 书中的源码可以在此下载.我将源码放到了线上,如果不想下载,可以直接访问在线网址,修改页面名就能访问到相 ...
- [C#] C# 知识回顾 - 特性 Attribute
C# 知识回顾 - 特性 Attribute [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5911289.html 目录 特性简介 使用特性 特性 ...
- 深入学习jQuery特性操作
× 目录 [1]获取特性 [2]设置特性 [3]删除特性 前面的话 每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息.操作特性的DOM方法主要有3个:getAttrib ...
随机推荐
- python数据分析第二版:数据加载,存储和格式
一:读取数据的函数 1.读取csv文件 import numpy as np import pandas as pd data = pd.read_csv("C:\\Users\\Admin ...
- NVMe固态硬盘工具箱使用说明
https://www.bilibili.com/read/cv562989/ 浦科特NVMe固态硬盘工具箱使用说明 数码 2018-6-7 687阅读7点赞3评论 浦科特已经推出针对NVMe固态硬盘 ...
- Java架构师/高并发/高可用/高扩展/性能优化/框架源码分析实战
https://ke.qq.com/course/401944?taid=3389721334391320
- jQuery入门教程-文档操作方法
一.append()和appendTo() 1.1 append()方法 <body> <p>好好学习</p> <button>append() 方法& ...
- python 使用xlsxwriter的方法属性
http://xlsxwriter.readthedocs.io/format.html
- VBox 启动虚拟机失败 - NtCreateFile(\Device\VBoxDrvStub)
在Vbox(5.0.8 版本)启动Ubuntu的虚拟机时,遇到错误信息: NtCreateFile(\Device\VBoxDrvStub) failed: 0xc000000034 STATUS_O ...
- .Net-WCF-图书:《WCF编程》
ylbtech-.Net-WCF-图书:<WCF编程> <WCF编程>是2008年1月机械工业出版社出版的图书,作者是Juval Lowy.Clemens Vasters. 1 ...
- PHP-图片处理
开启 GD 扩展(php_gd2.dll) 创建画布 画布:一种资源型数据,可以操作的图像资源. 创建新画布(新建) ImageCreate(宽,高); 创建基于调色板的画布. imageCreate ...
- Oracle-数据表对象
表一般指的是一个关系表,也可以生成对象表以及临时表.齐总,对象表是通过用户定义的数据类型生成的,临时表用于存储专用于某个事务或会话的临时数据 字符类型: 定长:char (1-2000字节) 变长:v ...
- sysbench - 数据库功能及性能测试工具
sysbench 的 GitHub 参考资料 1.0 之后的版本使用方法跟之前的有所区别,下面所有内容基于 1.0.9 版本. 另外,为了方便管理测试,最好不要通过命令直接运行测试,而是写成脚本自动化 ...