C#用反射實現兩個類的對象之間相同屬性的值的復制

?目錄

1.適用于創建實體的時候從一個實體作為數據源賦值

2.適用于沒有創建實體,兩個實體之間數據的轉換


1.適用于創建實體的時候從一個實體作為數據源賦值

/// <summary>
/// 反射實現兩個類的對象之間相同屬性的值的復制
/// 適用于初始化新實體
/// </summary>
/// <typeparam name="D">返回的實體</typeparam>
/// <typeparam name="S">數據源實體</typeparam>
/// <param name="s">數據源實體</param>
/// <returns>返回的新實體</returns>
public static D Mapper<D, S>(S s)
{D d = Activator.CreateInstance<D>(); //構造新實例try{var Types = s.GetType();//獲得類型  var Typed = typeof(D);foreach (PropertyInfo sp in Types.GetProperties())//獲得類型的屬性字段  {foreach (PropertyInfo dp in Typed.GetProperties()){if (dp.Name == sp.Name && dp.PropertyType == sp.PropertyType && dp.Name!= "Error" && dp.Name != "Item")//判斷屬性名是否相同  {dp.SetValue(d, sp.GetValue(s, null), null);//獲得s對象屬性的值復制給d對象的屬性  }}}}catch (Exception ex){throw ex;}return d;
}

2.適用于沒有創建實體,兩個實體之間數據的轉換

/// <summary>
/// 反射實現兩個類的對象之間相同屬性的值的復制
/// 適用于沒有新建實體之間
/// </summary>
/// <typeparam name="D">返回的實體</typeparam>
/// <typeparam name="S">數據源實體</typeparam>
/// <param name="d">返回的實體</param>
/// <param name="s">數據源實體</param>
/// <returns></returns>
public static D MapperToModel<D, S>(D d,S s)
{try{var Types = s.GetType();//獲得類型  var Typed = typeof(D);foreach (PropertyInfo sp in Types.GetProperties())//獲得類型的屬性字段  {foreach (PropertyInfo dp in Typed.GetProperties()){if (dp.Name == sp.Name && dp.PropertyType == sp.PropertyType && dp.Name != "Error" && dp.Name != "Item")//判斷屬性名是否相同  {dp.SetValue(d, sp.GetValue(s, null), null);//獲得s對象屬性的值復制給d對象的屬性  }}}}catch (Exception ex){throw ex;}return d;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696447.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696447.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696447.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

選擇VR全景行業,需要了解哪些內容?

近年來&#xff0c;隨著虛擬現實、增強現實等技術的持續發展&#xff0c;VR全景消費市場得以穩步擴張。其次&#xff0c;元宇宙行業的高速發展&#xff0c;也在進一步拉動VR全景技術的持續進步&#xff0c;帶動VR產業的高質量發展。作為一種戰略性的新興產業&#xff0c;國家和…

OJ_學生信息系統

題干 輸入樣例&#xff1a; 5 zhaoyi 70 80 90 240 qianer 65 32 77 174 sunsan 100 55 68 223 lisi 86 77 90 253 wangwu 100 59 66 225 輸出樣例&#xff1a; *[qianer] 65 32 77 *[sunsan] 100 55 68 *[wangwu] 100 59 66 lisi 86 77 90 zhaoyi 70 80 90 wangwu 100 59 6…

k8s-權限管理

1. 身份認證 我們在目前的k8s集群環境里面&#xff0c;只能在master節點上執行kubectl的一些命令&#xff0c;在其他節點上執行就會報錯 # 看一下是不是 [rootnode1 ~]# kubectl get nodes E0220 12:50:15.695133 6091 memcache.go:238] couldnt get current server API gro…

云打印api搭建,云打印api怎么對接?

相信近來一段時間云打印概念的火熱讓很多企業和App都有開展打印業務的想法&#xff0c;但是云打印技術的開發又需要有打印設備的支持&#xff0c;這個時候我們可以找到專業的云打印服務平臺進行api對接。那么云打印api搭建&#xff0c;云打印api怎么對接&#xff1f;今天來一起…

es6 中字符串、函數、對象、數組分別新增了哪些擴展

es6 中字符串的擴展 includesstartsWithendsWith padStartpadEnd模版字符串 es6 中函數的擴展 箭頭函數 this 對象指向定義時所在的對象不可以當作構造函數&#xff0c;不可以使用 new 命令不可以使用 arguments 對象&#xff0c;可以使用 rest 參數不可以適用 yield 命令&a…

C語言自定義類型:結構體的使用及其內存對齊【超詳細建議點贊收藏】

目錄 1. 結構體類型的聲明1.1 結構的聲明1.2 結構體變量的創建和初始化1.3 結構的特殊聲明---匿名結構體1.4 結構的自引用 2.結構體內存對齊&#xff08;重點&#xff01;&#xff01;&#xff09;2.1 對齊規則2.2 例題講解2.3 為什么存在內存對齊&#xff1f;2.4 修改默認對齊…

OpenGauss數據庫本地搭建并結合內網穿透實現遠程訪問

文章目錄 前言1. Linux 安裝 openGauss2. Linux 安裝cpolar3. 創建openGauss主節點端口號公網地址4. 遠程連接openGauss5. 固定連接TCP公網地址6. 固定地址連接測試 前言 openGauss是一款開源關系型數據庫管理系統&#xff0c;采用木蘭寬松許可證v2發行。openGauss內核深度融合…

云渲染農場服務給力嗎?全天候不間斷服務如何保障?

近年來&#xff0c;云渲染農場以其強大的計算能力和高效的渲染速度而聞名&#xff0c;為各行各業的視覺創作提供了不可或缺的支持。但是&#xff0c;人們普遍關心的是&#xff0c;云渲染農場服務是否真的給力&#xff1f;全天候的服務又是如何保障呢&#xff1f; 實際上&#…

用Python插入頁碼到PDF文檔

頁碼是許多類型文件中的重要內容&#xff0c;它能方便讀者在文檔中的導航。在創建PDF文檔時&#xff0c;添加頁碼對于組織和引用內容特別有用。在本文中&#xff0c;我們將探討如何利用Python程序高效地插入頁碼到PDF文檔中&#xff0c;簡化工作流程并創建出精美、結構合理的PD…

【JavaEE】_synchronized關鍵字——監視器鎖monitor lock

目錄 1. synchronized的特性 2. synchronized的使用 3. Java標準庫中的線程安全類 1. synchronized的特性 &#xff08;1&#xff09;互斥&#xff1a; 前文已經介紹&#xff0c;某個線程執行到某個對象的synchronized中時&#xff0c;其他線程如果也執行到同一個對象&…

2024 Sora來了!“手機Agent智能體”也來了!

近日&#xff0c;Open AI發布了能夠根據文本生成超現實視頻的工具Sora&#xff0c;多款震撼視頻引爆科技圈刷屏&#xff0c;熱度持續發酵占據AI領域話題中心&#xff0c;被認為是AGI實現過程里的重大里程碑事件。新一輪的人工智能浪潮給人類未來的生產和生活方式帶來巨大而深遠…

VPN | 世界那么大,我想“魔法”上網看看,可以嗎?

Hi&#xff0c;大家好&#xff0c;我是半畝花海。世界那么大&#xff0c;我想“魔法”上網看看&#xff0c;可以嗎&#xff1f;隨著網絡的發展與普及&#xff0c;暢游網絡世界已成為人們生活的一部分。它給我們開拓了視野&#xff0c;增長了見聞&#xff0c;豐富了知識&#xf…

FISCO BCOS(二)———配置及使用控制臺

一、前言 FISCO BCOS是由金融區塊鏈合作聯盟&#xff08;深圳&#xff09;與微眾銀行共同發起的開源區塊鏈項目&#xff0c;支持多鏈多賬本&#xff0c;滿足金融行業復雜業務需求。本文將介紹如何在Ubuntu操作系統上使用Linux命令配置FISCO BCOS的控制臺并進行get/set操作。 目…

React 模態框的設計(一)拖動組件的設計

春節終結束了&#xff0c;忙得我頭疼。終于有時間弄自己的東西了。今天來寫一個關于拖動的實例講解。先看效果&#xff1a; 這是一個簡單的組件設計&#xff0c;如果用原生的js設計就很簡單&#xff0c;但在React中有些事件必須要多考慮一些。這是一個系列的文章&#xff0c;…

SpringBoot3整合elasticsearch8

版本 SpringBoot 3.0 Elasticsearch 8.12.1 依賴 我使用的 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> 還可以用&#xff0c;但我沒用…

YOLOv9來咧!

文章目錄 論文:主要內容一、提出使用PGI&#xff08;Programmable Gradient Information&#xff0c;可編程梯度信息&#xff09;來解決信息瓶頸問題和深度監督機制不適合輕量級神經網絡的問題。二、設計了GELAN&#xff08;Generalized ELAN &#xff0c;廣義ELAN&#xff09;…

LLM 模型融合實踐指南:低成本構建高性能語言模型

編者按&#xff1a;隨著大語言模型技術的快速發展&#xff0c;模型融合成為一種低成本但高性能的模型構建新途徑。本文作者 Maxime Labonne 利用 mergekit 庫探索了四種模型融合方法&#xff1a;SLERP、TIES、DARE和passthrough。通過配置示例和案例分析&#xff0c;作者詳細闡…

Ansible playbook 劇本部署WEB NFS rsync sersync(及時監控)架構

ansible playbook劇本介紹&#xff1a; playbook 是ansible用于配置&#xff0c;部署和管理被節點的劇本 由一個或多個模塊組成&#xff0c;完成統一的目的&#xff0c;實現自動化操作 劇本編寫需遵循yaml語法 yaml的三要素&#xff1a; 縮進&#xff1a;兩個字符&#xff0c;默…

【Vue3】toRefs和toRef在reactive中的一些應用

&#x1f497;&#x1f497;&#x1f497;歡迎來到我的博客&#xff0c;你將找到有關如何使用技術解決問題的文章&#xff0c;也會找到某個技術的學習路線。無論你是何種職業&#xff0c;我都希望我的博客對你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章&#xff0c;也歡…

快速上手vue指南

Vue.js 是一款非常流行且易于上手的前端框架&#xff0c;用于構建用戶界面和單頁應用程序&#xff08;SPA&#xff09;。它以其簡潔的API、靈活的組件系統和高效的性能著稱。如果你是初學者&#xff0c;以下是一些關鍵步驟和建議&#xff0c;可以幫助你快速上手 Vue.js。 1. 理…