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();
    }
}
相关推荐
张鱼小丸子_微辣2 小时前
.Net Framework 4/C# 集合和索引器
c#
布伦鸽2 小时前
C# WPF 左右布局实现学习笔记(1)
笔记·学习·c#·wpf
InCerry3 小时前
C# 模式匹配全解:原理、用法与易错点
c#
IGP93 小时前
20250606-C#知识:List排序
c#·list
老刘忙Giser3 小时前
c# List<string>.Add(s) 报错:UnsupportedOperationException
开发语言·c#
The Future is mine5 小时前
在.NET Core控制器中获取AJAX传递的Body参数
c#·.netcore
Eiceblue5 小时前
C# 快速检测 PDF 是否加密,并验证正确密码
开发语言·pdf·c#·visual studio
FL16238631295 小时前
C#报错 iText.Kernel.Exceptions.PdfException: ‘Unknown PdfException
开发语言·c#
绿荫阿广16 小时前
互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(五):使用.NET为树莓派开发Wifi配网功能
c#·.net
ou.cs19 小时前
c# :this() 和 :base()区别
开发语言·c#