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();
    }
}
相关推荐
WarPigs17 小时前
C#把byte[]以十六进制打印,带分割符
c#
暴走约伯18 小时前
【VFX工具链源码拆解 04】拯救丢失的绑定:Timeline 一键克隆与层级相对路径重映射算法
unity·c#·游戏引擎·硬件工程
1-1=018 小时前
C# 反射
c#·.net·.netcore
步步为营DotNet19 小时前
.NET 可观测性选型:Metrics、ActivitySource、EventSource 到底该用哪个
c#·.net·metrics·可观测性
吃一碗粉只付一碗钱1 天前
16-SqlSugar多库ConfigId与按实体选连接
sqlserver·c#
rockey6271 天前
AScript之字符串模板
c#·.net·script·expression·动态脚本
will_net1 天前
Redis集群部署+Redis 链接地址放入Aollo +c#项目接入Redis
redis·c#·bootstrap
BuHuaX2 天前
Lua 与 ToLua:运行机制及热更新原理
开发语言·unity·junit·c#·lua
asdzx672 天前
C# 操作 PDF 元数据:从属性写入到字段提取的完整流程
前端·pdf·c#