c# 反射实现模型深拷贝
1.支持属性,不支持字段,支持复杂类型属性
2.泛型集合类支持List<T>与Dictionary<TKey,TValue>
3.如果发现有什么问题,希望大家可以多多指教
/// <summary> /// 模型深拷贝 /// </summary> /// <param name="model"></param> /// <returns></returns> public static object Clone(this object model) { var modelType = model.GetType(); if (modelType.IsValueType) { return model; } if (modelType.Name == typeof(List<>).Name) { var genericType = modelType.GenericTypeArguments; var newObj = Activator.CreateInstance(genericType.FirstOrDefault()); var newList = (IList)Activator.CreateInstance(modelType); foreach (var itemObj in (IList)model) { newList.Add(itemObj.Clone()); } return newList; } if (modelType.Name == typeof(Dictionary<,>).Name) { var genericType = modelType.GenericTypeArguments; var newkey = Activator.CreateInstance(genericType[0]); var newValue = Activator.CreateInstance(genericType[1]); var newDic = (IDictionary)Activator.CreateInstance(modelType); var modelDic = (IDictionary)model; foreach (var itemkey in (modelDic.Keys)) { newDic.Add(itemkey.Clone(), modelDic[itemkey].Clone()); } return newDic; } var pros = modelType.GetProperties(); var newModel = Activator.CreateInstance(modelType, true); var newModelType = newModel.GetType(); var newpros = newModelType.GetProperties(); foreach (var pro in pros) { var newPro = newpros.FirstOrDefault(u => u.Name == pro.Name); if (pro.PropertyType.IsValueType || pro.PropertyType == typeof(string)) { var value = pro.GetValue(model); newPro.SetValue(newModel, value); } else { var value = pro.GetValue(model); var actobj = Activator.CreateInstance(newPro.PropertyType, true); newPro.SetValue(newModel, value.Clone()); } } return newModel; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用