C#的深度拷贝以及获取枚举注释
1.使用该扩展类需添加引用
csharp
复制代码
using System;
using System.ComponentModel;
using System.IO;
using System.Reflection;
using System.Runtime.Serialization.Formatters.Binary;
2.工具类
csharp
复制代码
public static class ExtensionHelper
{
/// <summary>
/// 深度拷贝
/// </summary>
/// <typeparam name="T">需要被深度拷贝对象的类型,若类未设置[Serializable]则返回null</typeparam>
/// <param name="obj">深度拷贝的对象,若类未设置[Serializable]则返回null</param>
/// <returns></returns>
public static T DeepCopy<T>(this T obj)
{
if (!obj.GetType().IsSerializable)
{
return default(T);
}
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
/// <summary>
/// 获取枚举的中文注释
/// </summary>
/// <param name="e">需要获取中文注释的枚举类型注释,对象的注释格式为:[Description("中文注释")]</param>
/// <returns></returns>
public static string EnumDesc(this Enum e)
{
var enumType = e.GetType();
//正常标识
FieldInfo EnumInfo = enumType.GetField(e.ToString());
DescriptionAttribute[] EnumAttributes = (DescriptionAttribute[])EnumInfo.
GetCustomAttributes(typeof(DescriptionAttribute), false);
if (EnumAttributes.Length > 0)
{
return EnumAttributes[0].Description;
}
return e.ToString();
}
}