日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

如何通过 C# 实现对象的变更跟踪 ?

發(fā)布時(shí)間:2023/12/4 C# 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何通过 C# 实现对象的变更跟踪 ? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

咨詢區(qū)

  • user137348

我有一個(gè)類包含五個(gè)屬性,如果任何一個(gè)屬性被改變,我希望這個(gè)類中的另一個(gè)屬性(IsDirty)會(huì)被自動(dòng)變更,比如下面的類。

public?class?Class1 {bool?IsDIrty?{get;set;}string?Prop1?{get;set;}string?Prop2?{get;set;}string?Prop3?{get;set;}string?Prop4?{get;set;}string?Prop5?{get;set;} }

回答區(qū)

  • Shimmy Weitzhandler

在 .NET Standard 2.0 中已經(jīng)提供了 IChangeTracking 和 IRevertibleChangeTracking 接口可以幫助你實(shí)現(xiàn)對(duì)象的變更跟蹤,接口實(shí)現(xiàn)如下:

  • IChangeTracking

  • class?Entity?:?IChangeTracking {string?_FirstName;public?string?FirstName{get?=>?_FirstName;set{if?(_FirstName?!=?value){_FirstName?=?value;IsChanged?=?true;}}}string?_LastName;public?string?LastName{get?=>?_LastName;set{if?(_LastName?!=?value){_LastName?=?value;IsChanged?=?true;}}}public?bool?IsChanged?{?get;?private?set;?}????public?void?AcceptChanges()?=>?IsChanged?=?false; }
  • IRevertibleChangeTracking

  • class?Entity?:?IRevertibleChangeTracking {Dictionary<string,?object>?_Values?=?new?Dictionary<string,?object>();string?_FirstName;public?string?FirstName{get?=>?_FirstName;set{if?(_FirstName?!=?value){if?(!_Values.ContainsKey(nameof(FirstName)))_Values[nameof(FirstName)]?=?_FirstName;_FirstName?=?value;IsChanged?=?true;}}}string?_LastName;public?string?LastName{get?=>?_LastName;set{if?(_LastName?!=?value){if?(!_Values.ContainsKey(nameof(LastName)))_Values[nameof(LastName)]?=?_LastName;_LastName?=?value;IsChanged?=?true;}}}public?bool?IsChanged?{?get;?private?set;?}public?void?RejectChanges(){foreach?(var?property?in?_Values)GetType().GetRuntimeProperty(property.Key).SetValue(this,?property.Value);AcceptChanges();}public?void?AcceptChanges(){_Values.Clear();IsChanged?=?false;} }

    可以看到,上面這種方式是可以實(shí)現(xiàn)的,但需要人工一行一行的鍵入,如何字段特別多的話,工作量還是非常大的,作為另一個(gè)選擇,我建議你使用 TrackerDog 這樣的開源工具包,它可以幫你一鍵生成模板,你只需要提供 POCO 類即可。

    點(diǎn)評(píng)區(qū)

    這種類屬性的變更通知,我記得 WPF 中就提供了 INotifyPropertyChanged 接口來(lái)實(shí)現(xiàn)這種 MVVM 的雙向綁定,確實(shí)這也是一個(gè)非常實(shí)用的特性,學(xué)習(xí)了。

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的如何通过 C# 实现对象的变更跟踪 ?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。