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();
    }
}
相关推荐
Sator130 分钟前
C#与AI的交互(以DeepSeek为例)
ai·语言模型·c#
玩c#的小杜同学2 小时前
从“Switch-case“到“智能模式“:C#模式匹配的终极进化指南
开发语言·前端·c#·.net
步、步、为营4 小时前
解锁C# XML编程:从新手到实战高手的蜕变之路
xml·数据库·c#
智想天开7 小时前
工厂方法模式:思考与解读
开发语言·c#·工厂方法模式
一抓掉一大把9 小时前
c#笔记-基础知识
开发语言·笔记·c#
Nicole Potter10 小时前
内存泄漏指什么?常见的内存泄漏有哪些?
开发语言·游戏·unity·面试·c#
Nicole Potter1 天前
装箱和拆箱是什么?(C#)
开发语言·游戏·面试·c#
神仙别闹1 天前
基于C#+SQL Server设计与实现的教学管理信息系统
java·数据库·c#
玩c#的小杜同学1 天前
本地部署deepseek大模型后使用c# winform调用(可离线)
人工智能·学习·c#·软件工程