一、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 ...
随机推荐
- java.util.Date 与 java.sql.Date 相关知识点解析
问:java.sql.Date 和 java.util.Date 有什么区别? 答:这两个类的区别是 java.sql.Date是针对 SQL 语句使用的,它只包含日期而没有时间部分,一般在读写数 ...
- django之静态文件的设置
一:静态文件 Django中提供了一种解析的方式配置静态文件路径.静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理. 为了提 ...
- Linux下统计当前文件夹下的文件个数
Linux下统计当前文件夹下的文件个数 √ ls -l |grep "^-"|wc -l
- centos 6.5 安装 maven
从nexus官网下载Nexus Repository Manager OSS 2.x的安装包:nexus-2.14.1-01-bundle.tar.gz,3.x版本需要jdk8及以上 解压 tar x ...
- animation transition transform
animation:动画名称 花费时间 运动曲线 何时开始 播放次数 是否反方向 div{width:100px;height:100px;background:red;animation:move ...
- ssd_mobilenet_demo
操作系统:windows 10 64位 内存:8G GPU:Nvidia MX 150 Tensorflow: 1.4 1.安装python Anaconda3-5.0.1 ,默认python版本( ...
- 【HDOJ6621】K-th Closest Distance(主席树,二分)
题意:给定一个长为n的序列,有m次强制在线的询问,每次询问位置[L,R]中abs(a[i]-p)第k小的值 n,m<=1e5,a[i]<=1e6,p<=1e6,k<=169 思 ...
- python之面向过程,函数式编程,面向对象浅析
python编程有面向过程.面向函数.面向对象三种,那么他们区别在哪呢?这个问题,让我想起我在学习编程的时候,我的老师给我举的例子.分享给大家. 面向过程就是将编程当成是做一件事,要按步骤完成! 比如 ...
- selenuim&PhantomJS&Beautifulsoup练习经典实例
# coding = utf-8__autor__ = 'litao' from selenium import webdriverfrom selenium.webdriver.common.by ...
- 将百分制转换为5分制的算法 Binary Search Tree ordered binary tree sorted binary tree Huffman Tree
1.二叉搜索树:去一个陌生的城市问路到目的地: for each node, all elements in its left subtree are less-or-equal to the nod ...