`
- 浏览:
171085 次
- 性别:
- 来自:
深圳
-
1
using System;
2
using System.Collections;
3
using System.Text;
4
using System.ComponentModel;
5
using System.Reflection;
6
7
namespace Clubank.Common
8

{
9
/**//// <summary>
10
/// 提供了获得枚举的Description特性的实用方法以及可用于设计器的TypeConverter类
11
/// </summary>
12
public class EnumConverter : System.ComponentModel.EnumConverter
13
{
14
protected System.Type myVal;
15
16
/**//// <summary>
17
/// 获得枚举值的Description特性的值,一般是消息的搜索码
18
/// </summary>
19
/// <param name="value">要查找特性的枚举值</param>
20
/// <returns>返回查找到的Description特性的值,如果没有,就返回.ToString()</returns>
21
public static string GetEnumDescription(Enum value)
22
{
23
FieldInfo fi = value.GetType().GetField(value.ToString());
24
DescriptionAttribute[] attributes =
25
(DescriptionAttribute[])fi.GetCustomAttributes(
26
typeof(DescriptionAttribute), false);
27
return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
28
}
29
30
/**//// <summary>
31
/// 根据特定的枚举值名称获得枚举值的Description特性的值
32
/// </summary>
33
/// <param name="value">枚举类型</param>
34
/// <param name="name">枚举值的名称</param>
35
/// <returns>返回查找到的Description特性的值,如果没有,就返回.ToString()</returns>
36
public static string GetEnumDescription(System.Type value, string name)
37
{
38
FieldInfo fi = value.GetField(name);
39
DescriptionAttribute[] attributes =
40
(DescriptionAttribute[])fi.GetCustomAttributes(
41
typeof(DescriptionAttribute), false);
42
return (attributes.Length > 0) ? attributes[0].Description : name;
43
}
44
45
/**//// <summary>
46
/// 基于Description特性或者枚举值名称获得具体的枚举值
47
/// </summary>
48
/// <param name="value">枚举类型</param>
49
/// <param name="description">Description特性值或者元素的名称</param>
50
/// <returns>返回枚举值。如果没找到,返回传入的Description值</returns>
51
public static object GetEnumValue(System.Type value, string description)
52
{
53
FieldInfo[] fis = value.GetFields();
54
foreach (FieldInfo fi in fis)
55
{
56
DescriptionAttribute[] attributes =
57
(DescriptionAttribute[])fi.GetCustomAttributes(
58
typeof(DescriptionAttribute), false);
59
if (attributes.Length > 0)
60
{
61
if (attributes[0].Description == description)
62
{
63
return fi.GetValue(fi.Name);
64
}
65
}
66
if (fi.Name == description)
67
{
68
return fi.GetValue(fi.Name);
69
}
70
}
71
return description;
72
}
73
74
public EnumConverter(System.Type type)
75
: base(type.GetType())
76
{
77
myVal = type;
78
}
79
80
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
81
{
82
if (value is Enum && destinationType == typeof(string))
83
{
84
return GetEnumDescription((Enum)value);
85
}
86
if (value is string && destinationType == typeof(string))
87
{
88
return GetEnumDescription(myVal, (string)value);
89
}
90
return base.ConvertTo(context, culture, value, destinationType);
91
}
92
93
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
94
{
95
if (value is string)
96
{
97
return GetEnumValue(myVal, (string)value);
98
}
99
if (value is Enum)
100
{
101
return GetEnumDescription((Enum)value);
102
}
103
return base.ConvertFrom(context, culture, value);
104
}
105
106
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
107
{
108
return true;
109
}
110
111
public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
112
{
113
ArrayList values = new ArrayList();
114
FieldInfo[] fis = myVal.GetFields();
115
foreach (FieldInfo fi in fis)
116
{
117
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(
118
typeof(DescriptionAttribute), false);
119
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
在Python中,枚举类型通过enum模块中的Enum类来实现,这使得代码更加清晰、易于维护,并且可以避免魔术数字和字符串的滥用。本文将详细介绍如何在Python中使用枚举类型,包括枚举的基础概念、创建和使用枚举类的步骤...
### C++中的枚举类型(Enum) 在C++编程语言中,枚举(`enum`)是一种用户定义的...总之,枚举类型是C++中非常实用的数据类型之一,它不仅可以提高代码的可读性和可维护性,还能帮助开发者更直观地管理有限的选项集。
在Spring Boot项目中,枚举类型(Enums)的使用是一种常见...以上所述内容,都是在`springboot-enum-demo-master`项目中可以找到的实际应用示例,可以帮助开发者更好地理解和实现Spring Boot项目中枚举类型的高效使用。
给刚学C#的同学一些帮助 public enum CardColor : byte { 红桃, 方片, 梅花, 黑桃, }
枚举类型提供了一些内置的方法,可以帮助我们更方便地操作枚举元素: 1. **`values()`**:返回一个包含该枚举类型所有元素的数组。 2. **`name()`**:返回枚举元素的名称(即枚举定义时使用的标识符)。 3. **`...
MFC提供了一系列的类和函数,简化了Windows应用程序的开发,而STL则提供了包括容器、算法和迭代器在内的强大工具,能够帮助我们更高效地处理枚举类型。 案例中可能涵盖了以下知识点: 1. 枚举类型的定义和使用。 2...
在C#中,枚举类型是基于整数类型的,通常使用`enum`关键字来声明。例如: ```csharp enum Colors { Red, Green, Blue } ``` 上述代码定义了一个名为`Colors`的枚举,它有三个成员:`Red`、`Green`和`Blue`。默认...
综上所述,`java enum 枚举的spring boot2.x完美实现demo源码`示例主要展示了如何在Spring Boot 2.x项目中使用枚举类型,包括枚举的定义、属性和方法的添加,以及如何在实际业务场景中应用枚举,如与数据库的交互和...
在C语言中,枚举类型(enum)是一种基础而强大的数据类型,它主要用于定义一组命名的整型常量。...这些技巧不仅有助于提高编程效率,而且能够帮助开发者在实际编程过程中更加灵活和高效地使用枚举类型。
### Java中的“枚举类型”知识点详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种特殊的类,其设计初衷是为了更好地处理...理解并熟练掌握枚举类型的使用,能够帮助开发者编写出更加清晰、可维护的代码。
枚举类型的声明使用 enum 关键字,即一种由一组称为枚举数列表的命名常量组成的独特类型。每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。通常枚举用来定义单选的...
在ActionScript 3.0中,枚举类型的定义方式与类非常相似,但是有一些关键的区别: 1. **final** 关键字:枚举类必须是`final`的,这意味着它们不能被继承。 2. **成员常量**:枚举类中的成员通常是`public static ...
对于C++,枚举类型在C++98中相对简单,但在C++11及以后版本中引入了更强的枚举类(`enum class`),增强了枚举的封装性: ```cpp enum class Color { Red, Green, Blue }; ``` 在C++中,枚举类的成员需要通过作用...
在Java中,枚举类型本质上是一个`final`类,自动继承`Enum`类,并且每个枚举常量都是该类的一个实例。编译器还会自动为枚举类型添加一些默认的方法,如`values()`和`valueOf()`等。 #### 七、枚举与接口 在某些...
总的来说,枚举类型是程序设计中一种非常实用的工具,它帮助我们组织代码,提高代码的可读性和可维护性。通过理解枚举类型的基本概念、定义方式以及使用规则,开发者能够更好地利用这种数据类型来编写更高效、更安全...
枚举类型是Python中一种非常有用的数据类型,它可以帮助开发者以一种结构化和可读性高的方式处理一组相关的常量。通过本文的详细介绍和代码示例,你应该对如何在Python中使用枚举类型有了深入的理解。枚举类型不仅...
C语言结构体、共用体和枚举类型知识要点 结构体是C语言中的复杂数据类型,它可以由基本数据...在C语言程序设计中,结构体、共用体和枚举类型都是非常重要的概念,Mastering它们可以帮助开发者更好地设计和实现程序。
这些技术可以帮助开发者更好地处理枚举类型数据,提高开发效率和代码质量。 知识点: * Spring MVC处理参数中的枚举类型通用实现方法 * 自定义转换类型 * 统一的自定义接口实现 * ConverterFactory接口的实现 * ...