枚舉特性標記和基本處理類及應用
來源:程序員人生 發布時間:2014-10-02 08:00:00 閱讀次數:2068次
定義錯誤類別:
/// <summary>
/// 錯誤碼枚舉
/// </summary>
public enum CodeEnum : int
{
解析報文出錯 = 10000,
數據包為空 = 10001,
參數無效 = 10002,
執行失敗 = 10003,
調用接口校驗不成功 = 10004,
應用內部錯誤 = 10005
}
自定義錯誤類:
using Newtonsoft.Json;
using System;
namespace Business
{
[JsonObject]
public class ExceptionBiz : Exception
{
public ExceptionBiz(CodeEnum code, string msg)
{
Code = code;
Msg = msg;
LogManage.Add(StackTrace+ msg);//記錄日志
}
/// <summary>
/// 業務信息編碼
/// </summary>
public CodeEnum Code { get; set; }
/// <summary>
/// 業務信息消息
/// </summary>
public string Msg { get; set; }
}
}
public static void Add(string content)
{
string logPath = GetApp("LogPath");
if (logPath == "")
logPath = @"G:log";
//string dirPath = Directory.GetCurrentDirectory() + logPath;
if (!Directory.Exists(logPath))
{
Directory.CreateDirectory(logPath);
}
string fileName = DateTime.Now.ToString("yyyyMMdd")+".txt";
using (FileStream fs = new System.IO.FileStream(logPath + fileName, System.IO.FileMode.Append))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+":"+ content);
}
}
}
核心代碼:
using System;
using System.Collections.Generic;
using System.Reflection;
namespace Business
{
public class EnumHelper
{
/// <summary>
/// 用于緩存枚舉值的屬性值
/// </summary>
private static readonly Dictionary<object, EnumAttribute> enumAttr = new Dictionary<object, EnumAttribute>();
/// <summary>
/// 獲取枚舉值的名稱,該名稱由EnumAttribute定義
/// </summary>
/// <param name="value">枚舉值</param>
/// <returns>枚舉值對應的名稱</returns>
public static string GetName(Enum value)
{
EnumAttribute ea = GetAttribute(value);
return ea != null ? ea.Name : "";
}
/// <summary>
/// 獲取枚舉值的名稱,該名稱由EnumAttribute定義
/// </summary>
/// <param name="value">枚舉值</param>
/// <returns>枚舉值對應的名稱</returns>
public static string GetDescription(Enum value)
{
EnumAttribute ea = GetAttribute(value);
return ea != null ? ea.Description : "";
}
/// <summary>
/// 從字符串轉換為枚舉類型
/// </summary>
/// <typeparam name="T">枚舉類型</typeparam>
/// <param name="str">要轉為枚舉的字符串</param>
/// <returns>轉換結果</returns>
public static T GetEnum<T>(string str)
{
if (string.IsNullOrWhiteSpace(str))
throw new ExceptionBiz(CodeEnum.解析報文出錯, "排序對象解析出錯!");
try
{
T pe = (T)Enum.Parse(typeof(T), str);
return pe;
}
catch
{
Type type = typeof(T);
string templete = "枚舉類型{0}中沒有定義{1}項!";
string msg = string.Format(templete, type.ToString(), str);
throw new ExceptionBiz(CodeEnum.解析報文出錯, msg);
}
}
/// <summary>
/// 獲取枚舉值定義的屬性
/// </summary>
/// <param name="value">枚舉對象</param>
/// <returns>獲取枚舉對象的描述屬性值</returns>
private static EnumAttribute GetAttribute(Enum value)
{
if (enumAttr.ContainsKey(value))
{
EnumAttribute ea = enumAttr[value];
return ea;
}
else
{
FieldInfo field = value.GetType().GetField(value.ToString());
if (field == null) return null;
EnumAttribute ea = null;
object[] attributes = field.GetCustomAttributes(typeof(EnumAttribute), true);
if (attributes != null && attributes.Length > 0)
{
ea = (EnumAttribute)attributes[0];
}
enumAttr[value] = ea;
return ea;
}
}
}
/// <summary>
///描述枚舉的屬性
/// </summary>
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
public class EnumAttribute : Attribute
{
private string _name;
private string _description;
/// <summary>
/// 枚舉名稱
/// </summary>
public string Name
{
get { return _name; }
set { _name = value; }
}
/// <summary>
/// 枚舉描述
/// </summary>
public string Description
{
get { return _description; }
set { _description = value; }
}
/// <summary>
/// 構造函數
/// </summary>
/// <param name="name">枚舉名稱</param>
public EnumAttribute(string name)
{
this.Name = name;
}
/// <summary>
/// 構造函數
/// </summary>
/// <param name="name">枚舉名稱</param>
/// <param name="description">枚舉描述</param>
public EnumAttribute(string name, string description)
{
this.Name = name;
this.Description = description;
}
}
}
應用:
ProductEnum pe = EnumHelper.GetEnum<ProductEnum>(v.Name); //名稱獲取枚舉對象
string name = EnumHelper.GetName(pe); //獲取枚舉對象的描述
if (string.IsNullOrWhiteSpace(name))
throw new ExceptionBiz(CodeEnum.解析報文出錯, "排序對象映射出錯!");
/// <summary>
/// 商品排序枚舉
/// </summary>
public enum ProductEnum
{
[EnumAttribute("sales")]銷量,
[EnumAttribute("mprice3")]價格,
[EnumAttribute("comments")]評論,
[EnumAttribute("id")]最新
}
配合之前一篇排序處理:http://blog.csdn.net/joyhen/article/details/39204473
可以很方便的處理多維度排序
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈