C#的深度拷贝以及获取枚举注释

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();
    }
}
相关推荐
大飞pkz2 小时前
【设计模式】解释器模式
开发语言·设计模式·c#·解释器模式
敲敲敲-敲代码5 小时前
web系统(asp.net和C#)
前端·c#·asp.net
__XYZ5 小时前
Vala编程语言高级特性-弱引用和所有权
c语言·开发语言·后端·c#
大飞pkz11 小时前
【设计模式】责任链模式
开发语言·设计模式·c#·责任链模式
大飞pkz12 小时前
【设计模式】六大基本原则
开发语言·设计模式·c#·六大原则
椒颜皮皮虾14 小时前
DeploySharp开源发布:让C#部署深度学习模型更加简单
c#·openvino
Rotion_深19 小时前
海康 智能相机二开 绘制底图+测试工具应用框
c#·二次开发·海康·智能相机
王家视频教程图书馆21 小时前
C# asp.net模板代码简单API请求
开发语言·c#·asp.net
大飞pkz1 天前
【设计模式】备忘录模式
开发语言·设计模式·c#·备忘录模式
李宥小哥1 天前
C#基础09-面向对象关键字
开发语言·c#