Enum扩展特性实例代码
导读:收集整理的这篇文章主要介绍了Enum扩展特性实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。由于对英语的天生缺陷,在枚举时一直使用中文,这样就不用看注释就知道枚举意思,今天看到博文使用特性代替了直接使用中文作为属性。特意摘抄部分为...
收集整理的这篇文章主要介绍了Enum扩展特性实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。由于对英语的天生缺陷,在枚举时一直使用中文,这样就不用看注释就知道枚举意思,今天看到博文使用特性代替了直接使用中文作为属性。特意摘抄部分为以后使用方便
/// summary>
/// 枚举帮助类/// /summary>
public static class EnumTools {
/// summary>
/// 获取当前枚举值的描述和排序/// /summary>
/// param name="value">
/param>
/// returns>
返回元组Tuple(string,int)/returns>
public static Tuplestring,int>
GetDescription(this Enum value) {
int order = 0;
string description = string.Empty;
TyPE type = value.GetType();
// 获取枚举FieldInfo fieldInfo = type.GetField(value.ToString());
// 获取枚举自定义的特性DescriptionAttributeobject[] attrs = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
DescriptionAttribute attr = (DescriptionAttribute)attrs.FirstOrDefault(a =>
a is DescriptionAttribute);
description = fieldInfo.Name;
if (attr != null) {
order = attr.Order;
description = attr.Name;
}
return new Tuplestring,int>
(description,order);
}
/// summary>
/// 获取当前枚举的所有描述/// /summary>
/// returns>
/returns>
public static ListKeyValuePairint, string>
>
GetAllT>
() {
return GetAll(typeof(T));
}
/// summary>
/// 获取所有的枚举描述和值/// /summary>
/// param name="type">
/param>
/// returns>
/returns>
public static ListKeyValuePairint, string>
>
GetAll(Type type) {
ListEnumToolsModel>
list = new ListEnumToolsModel>
();
// 循环枚举获取所有的Fieldsforeach (VAR field in type.GetFields()) {
// 如果是枚举类型if (field.FieldType.IsEnum) {
object tmp = field.GetValue(null);
Enum enumValue = (Enum)tmp;
int intValue = Convert.ToInt32(enumValue);
var dec = enumValue.GetDescription();
int order= dec.ITem2;
string showName = dec.Item1;
// 获取描述和排序list.Add(new EnumToolsModel {
Key = intValue, Name = showName, Order = order }
);
}
}
// 排序并转成KeyValue返回return list.OrderBy(i =>
i.Order).Select(i =>
new KeyValuePairint, string>
(i.Key, i.Name)).ToList();
}
/// summary>
/// 枚举Model/// /summary>
partial class EnumToolsModel {
public int Order {
get;
set;
}
public string Name {
get;
set;
}
public int Key {
get;
set;
}
}
}
/// summary>
/// 枚举特性/// /summary>
[Attributeusage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]public class DescriptionAttribute : Attribute {
/// summary>
/// 排序/// /summary>
public int Order {
get;
set;
}
/// summary>
/// 名称/// /summary>
public string Name {
get;
set;
}
/// summary>
/// 定义描述名称/// /summary>
/// param name="name">
名称/param>
public DescriptionAttribute(string name) {
Name = name;
}
/// summary>
/// 定义描述名称和排序/// /summary>
/// param name="name">
名称/param>
/// param name="order">
排序/param>
public DescriptionAttribute(string name, int order) {
Name = name;
Order = order;
}
}
View Code把原文中的out参数替换成返回元组,由于项目是vs2015开发,不能用c#7.0特性,否则用7.0中的值元组应该更好一点。性能和显示友好性都会有改进。
以上就是Enum扩展特性实例代码的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Enum扩展特性实例代码
本文地址: https://pptw.com/jishu/592143.html
