面试官:实现一个带值变更通知能力的Dictionary
如題, 你知道字典KEY對應的Value什么時候被覆蓋了嗎?
最近大家都在追.Net6 update,咱還是保持節奏,通用語言聊技術。
沒背景說個鏟鏟
? ? ? ?上文中?數據獲取組件維護了業務方所有(在用)的連接對象,DBA能在后臺無侵入的切換備份庫。
如何主動清空.NET數據庫連接池?
上文中:DBA在為某個配置字符串切換新的連接信息時,SDK利用ClearPool(DBConnection conn)方法清空與這個連接相關的連接池。
清空的時機:維護在用連接的字典鍵值發生變更。
今天本文就來實現一個帶值變更通知能力的字典。
五毛錢的編程實踐
關鍵字:變更 通知 字典
using?System; using?System.Collections.Generic; using?System.Text; namespace?DAL {public?class?ValueChangedEventArgs<TK>?:?EventArgs{public?TK?Key?{?get;?set;?}public?ValueChangedEventArgs(TK?key){Key?=?key;}}public?class?DictionaryWapper<TKey,?TValue>{public?object??objLock?=?new?object();private?Dictionary<TKey,?TValue>?_dict;public?event?EventHandler<ValueChangedEventArgs<TKey>>?OnValueChanged;public?DictionaryWapper(Dictionary<TKey,?TValue>?dict){_dict?=?dict;}public?TValue?this[TKey?Key]{get?{?return?_dict[Key];?}set{lock(objLock){try{if?(_dict.ContainsKey(Key)?&&?_dict[Key]?!=?null?&&?!_dict[Key].Equals(value)){OnValueChanged(this,?new?ValueChangedEventArgs<TKey>(Key));}}catch?(Exception?ex){Console.WriteLine($"檢測值變更或者觸發值變更事件,發生未知異常{ex}");}finally{_dict[Key]?=?value;}}}}} }旁白:
1.定義值變更事件OnValueChanged?和變更時傳遞的事件參數ValueChangedEventArgs<TKey>2.如何定義值變更,也就是如何判定值類型、引用類型的相等性? ? ? ? ? #equal、hashcode#3.DictionaryWapper的表征實現也得益于C#索引器特性
訂閱值變更事件
var?_dictionaryWapper?=?new?DictionaryWapper<string,?string>(new?Dictionary<string,?string>?{?}); _dictionaryWapper.OnValueChanged?+=?new?EventHandler<ValueChangedEventArgs<string>>(OnConfigUsedChanged); //---- public?static?void?OnConfigUsedChanged(object?sender,?ValueChangedEventArgs<string>?e) {Console.WriteLine($"字典KEY:{e.Key}的值發生了變更,請注意...");?????????? }最后像正常Dictionary一樣為DictionaryWapper添加鍵值對:
?_dictionaryWapper[$"{dbConfig}:{connectionConfig.Provider}"]?=?connection.ConnectionString;五毛錢的結尾語
OK,本文實現了一個帶值變更通知能力的字典,算是一個剛性需求。
通過本文,重溫了C# event?、索引器的用法,基礎不牢,地動山搖。
?性感豹紋
??三分鐘掌握共享內存 & Actor并發模型
?如何主動清空.NET數據庫連接池?
?鵝廠二面,Nginx回憶錄
?Redis分布式鎖抽絲剝繭
?看過這么多爆文,依舊走不好異步編程這條路?
?誰說docker-compose不能水平擴展容器、服務多實例?
?Kubernetes探針踩坑記
?難纏的布隆過濾器,這次終于通透了
由于微信公眾號修改了推送規則,為便于大家及時收到我的不定時推送,加星標、一鍵三連互動、加好友(hihuangjun),不失為良策,就醬!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的面试官:实现一个带值变更通知能力的Dictionary的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 太神奇了!使用C#实现自动核验健康码:(
- 下一篇: 基于事件驱动架构构建微服务第4部分:re