一、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 ...
随机推荐
- django 多表查询并返回结果
(不喜勿喷,个人记录) 问题,有两张关联的表,表B的api_id关联表A的id 我想在页面上返回两张表查询之后的共同结果? 因为两张表的id是一样的,就先获取到表A的对象,然后拿表A的对象id当做表B ...
- C++数组读入MATLAB数据
data = rand(8, 10); fid = fopen('File.data', 'w'); if fid == - 1 error('Cannot open file for writing ...
- LYXF-PE-tools
先随便说一下这个PE-tools有什么用? 我开发这款PE-tools是为了学习而开发的,且是开源的,这里我会提供源码链接.它可以解析windows 32/64位程序中比较常用的一些属性. 里面有个稍 ...
- securityDemopom
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &l ...
- AOP说明
小程序的开发者或者服务商会提供一些lib库,用来代理小程序的生命周期或API等,进而想要进行一些通用逻辑的处理(例如: 打点/事件触发/统一登录等等通用逻辑). 通常,小程序开发者们使用这些扩展包时, ...
- 用树状数组写的最长上升子序列(友好城市),nlogn。
#include<iostream> #include<algorithm> #define maxn 100000 #define lb(x) x&-x using ...
- MapServer教程
https://mapserver.org/ MapServer是一个开放源代码平台,用于将空间数据和交互式地图应用程序发布到Web.由OSGEO批准的MapServer项目指导委员会(PSC)负责管 ...
- 关于Spring中BeanUtils的一次使用问题记录
1.问题描述:今天在进行前后端联调的时候,发现商品图片不能正常显示: 2.排查过程:查看浏览器控制台,发现调用接口返回的数据关于图片的字段未返回数据: 然后,又跑了一下Dao层的单元测试,从 ...
- Dpr ppi 适配 等概念 弹性属性的讲解
Dpr: Dpr的全称(Device pixel ratio)像素设备比例:就是说每个设备像素上占有的css位像素的个数 苹果手机常见的设备像素比:1.0安卓 iPhone2.0 3.0 如果是1. ...
- MySql使用mysqldump 导入与导出方法总结
导出数据库数据:首先打开cmd进入MySQL的bin文件夹下 1.导出education数据库里面的users表的表数据和表结构(下面以users表为例) mysqldump -u[用户名] -h[i ...