转自其他大佬文章,具体忘了,做下笔记
枚举代码:
public enum ApiConfig
{
/// <summary>
/// 用户信息
/// </summary>
//[EnumDescription("换成接口地址后可反射获取此字符串")]
Users,
/// <summary>
/// 部门
/// </summary>
//[EnumDescription("换成接口地址后可反射获取此字符串")]
Dept,
/// <summary>
/// 人员信息
/// </summary>
//[EnumDescription("换成接口地址后可反射获取此字符串")]
Person,
/// <summary>
/// 卡片
/// </summary>
//[EnumDescription("换成接口地址后可反射获取此字符串")]
Card,
/// <summary>
/// 门属性
/// </summary>
//[EnumDescription("换成接口地址后可反射获取此字符串")]
Doors,
/// <summary>
/// 时段
/// </summary>
//[EnumDescription("换成接口地址后可反射获取此字符串")]
Plans,
/// <summary>
/// 权限
/// </summary>
//[EnumDescription("换成接口地址后可反射获取此字符串")]
DoorRight,
/// <summary>
/// 刷卡记录
/// </summary>
//[EnumDescription("换成接口地址后可反射获取此字符串")]
DoorEvents,
}
1,直接把枚举转成字符串
ApiConfig api;
string enumstr = api.Users.ToString();
string enumstr = api.GetName(typeof(ApiConfig), api);
2,枚举+switch返回字符串
public string ApiPreparation(ApiConfig api)
{
switch (api)
{
case ApiConfig.Users:
return "字符串";
case ApiConfig.Dept:
return "字符串";
case ApiConfig.Person:
return "字符串";
case ApiConfig.Card:
return "字符串";
case ApiConfig.Doors:
return "字符串";
case ApiConfig.Plans:
return "字符串";
case ApiConfig.DoorRight:
return "字符串";
case ApiConfig.DoorEvents:
return "字符串";
default: //...
throw new Exception("接口未开发");
}
}
3,用反射获取枚举的属性,大的话性能会有点损耗,但是代码简洁,看着更舒服
把上面的枚举属性的注释解开
//[EnumDescription("换成接口地址后可反射获取此字符串")]
再添加反射获取枚举的属性的代码
/// <summary>
/// 自定义属性,用于设置定义的属性
/// </summary>
//public sealed class EnumDescriptionAttribute : Attribute
//{
// private string description;//属性
// /// <summary>
// /// 获取枚举属性
// /// </summary>
// public string Description { get { return description; } }
// public EnumDescriptionAttribute(string description) : base()
// {
// this.description = description;
// }
//}
/// <summary>
/// 获取枚举属性字符串
/// </summary>
//public static class EnumHelper
//{
// public static string GetDescription(Enum value)
// {
// if (value == null)
// {
// throw new ArgumentException("value");
// }
// string description = value.ToString();//将枚举名称转成字符串用来反射
// //反射中 FiedInfo 了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值
// //获取value的Type对象,再调用 GetFields 返回 FieldInfo 类型,用于取得该类的字段(成员变量)的信息
// var fieldInfo = value.GetType().GetField(description);//搜索
// var attributes = (EnumDescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(EnumDescriptionAttribute), false);//返回所有属性
// if (attributes != null && attributes.Length > 0)
// {
// description = attributes[0].Description;//获取第一个属性信息
// }
// return description;
// }
//}
反射就是可以动态的查询对象的属性,方法等,只要知道名称就能动态的调用和处理,但是资源会花的比明确调用的多,但是扩展和维护相当方便.