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();
    }
}
相关推荐
白雪公主的后妈3 小时前
Auto CAD二次开发——Ribbon界面(1)
ribbon·c#·cad二次开发
Byron Loong4 小时前
【C#】 RSA 密钥生成工具
c#
yngsqq6 小时前
二维异形排版、二维装箱(NPF碰撞检测)——CAD c#二次开发
开发语言·javascript·c#
切糕师学AI6 小时前
.NET 如何引用两个不同版本的dll?
c#·.net
烛阴8 小时前
不只是Public与Private:C#访问修饰符全方位解读
前端·c#
秋雨雁南飞9 小时前
c# 多项目编译发布
c#
张人玉10 小时前
C#Https协议相关知识点
开发语言·https·c#
Byron Loong10 小时前
【C#】VS调试——带参调试
开发语言·c#
故事不长丨10 小时前
解锁C#编程秘籍:封装、继承、多态深度剖析
开发语言·数据库·c#
努力小周10 小时前
基于STM32物联网智能老年人防摔系统
stm32·单片机·嵌入式硬件·物联网·c#·课程设计