[{"data":1,"prerenderedAt":1428},["ShallowReactive",2],{"blog:2006:equatable_weak_references":3,"blogMore-Development":1414,"comments-equatable_weak_references":1427},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"category":11,"tags":12,"excerpt":15,"body":56,"_type":1405,"_id":1406,"_source":1407,"_file":1408,"_stem":1409,"_extension":1410,"url":1411,"wordCount":1412,"minutes":254,"commentCount":1413},"/blog/2006/equatable_weak_references","2006",false,"en","Equatable Weak References","In a previous post I described a WeakReference\u003CT> class for providing strongly-typed WeakReference objects.","2006-08-28T07:06:56+00:00","Development",[13,14],".NET","C#",{"type":16,"children":17},"root",[18,43],{"type":19,"tag":20,"props":21,"children":22},"element","p",{},[23,26,33,35,41],{"type":24,"value":25},"text","In a previous post I described a ",{"type":19,"tag":27,"props":28,"children":30},"code",{"className":29},[],[31],{"type":24,"value":32},"WeakReference\u003CT>",{"type":24,"value":34}," class for providing strongly-typed ",{"type":19,"tag":27,"props":36,"children":38},{"className":37},[],[39],{"type":24,"value":40},"WeakReference",{"type":24,"value":42}," objects.",{"type":19,"tag":20,"props":44,"children":45},{},[46,48,50],{"type":24,"value":47},"GitHub has the ",{"type":24,"value":49},"latest version of ",{"type":19,"tag":27,"props":51,"children":53},{"className":52},[],[54],{"type":24,"value":55},"EquatableWeakReference\u003CT>",{"type":16,"children":57,"toc":1403},[58,85,104,130,135,140,145,160,165,170,182,1388,1397],{"type":19,"tag":20,"props":59,"children":60},{},[61,62,72,73,84],{"type":24,"value":25},{"type":19,"tag":63,"props":64,"children":66},"a",{"href":65},"/blog/2006/implementingweakreferencet/",[67],{"type":19,"tag":27,"props":68,"children":70},{"className":69},[],[71],{"type":24,"value":32},{"type":24,"value":34},{"type":19,"tag":63,"props":74,"children":78},{"href":75,"rel":76},"https://msdn2.microsoft.com/en-us/library/system.weakreference.aspx",[77],"nofollow",[79],{"type":19,"tag":27,"props":80,"children":82},{"className":81},[],[83],{"type":24,"value":40},{"type":24,"value":42},{"type":19,"tag":86,"props":87,"children":88},"blockquote",{},[89],{"type":19,"tag":20,"props":90,"children":91},{},[92,93],{"type":24,"value":47},{"type":19,"tag":63,"props":94,"children":97},{"href":95,"rel":96},"https://github.com/damieng/DamienGKit/blob/master/CSharp/DamienG.Library/System/EquatableWeakReference.cs",[77],[98,99],{"type":24,"value":49},{"type":19,"tag":27,"props":100,"children":102},{"className":101},[],[103],{"type":24,"value":55},{"type":19,"tag":20,"props":105,"children":106},{},[107,109,114,116,121,123,128],{"type":24,"value":108},"One problem with the previous ",{"type":19,"tag":27,"props":110,"children":112},{"className":111},[],[113],{"type":24,"value":32},{"type":24,"value":115}," class is being able to use and find it within the various collection classes. This is because one ",{"type":19,"tag":27,"props":117,"children":119},{"className":118},[],[120],{"type":24,"value":32},{"type":24,"value":122}," is not equal to another ",{"type":19,"tag":27,"props":124,"children":126},{"className":125},[],[127],{"type":24,"value":32},{"type":24,"value":129}," class.",{"type":19,"tag":20,"props":131,"children":132},{},[133],{"type":24,"value":134},"Overriding the Equals method fixes this problem at first glance however also reveals another issue.",{"type":19,"tag":20,"props":136,"children":137},{},[138],{"type":24,"value":139},"If you override Equals you should also override the GetHashCode method so that two objects that equal each other return the same hash code. This is because some of the collection classes use hash codes to efficiently lookup items within their collection.",{"type":19,"tag":20,"props":141,"children":142},{},[143],{"type":24,"value":144},"Normally a hash code would be calculated from the various data items that comprise the class but in our case we really only have one to go on: the Target object itself. This raises two more issues:",{"type":19,"tag":146,"props":147,"children":148},"ol",{},[149,155],{"type":19,"tag":150,"props":151,"children":152},"li",{},[153],{"type":24,"value":154},"The hash code should not change over the objects lifetime, which is difficult when your Target object can be changed.",{"type":19,"tag":150,"props":156,"children":157},{},[158],{"type":24,"value":159},"The hash code should be stored because the Target object might well be collected by the GC, and after all that’s what this class is all about.",{"type":19,"tag":20,"props":161,"children":162},{},[163],{"type":24,"value":164},"This doesn’t leave us with many choices at all.",{"type":19,"tag":20,"props":166,"children":167},{},[168],{"type":24,"value":169},"We must grab the hash code from the Target object within our constructor and store it for subsequent retrieval.",{"type":19,"tag":20,"props":171,"children":172},{},[173,175,180],{"type":24,"value":174},"Here is ",{"type":19,"tag":27,"props":176,"children":178},{"className":177},[],[179],{"type":24,"value":55},{"type":24,"value":181}," with the usual disclaimers as to it’s suitability for any purpose.",{"type":19,"tag":183,"props":184,"children":189},"pre",{"className":185,"code":186,"language":187,"meta":188,"style":188},"language-csharp shiki shiki-themes everforest-light dracula","using System;\nusing System.Runtime.InteropServices;\n\npublic class EquatableWeakReference\u003CT> : IEquatable\u003CEquatableWeakReference\u003CT>>, IDisposable where T : class\n{\n    protected GCHandle handle;\n    protected int hashCode;\n\n    public EquatableWeakReference(T target) {\n        if (target == null)\n            throw new ArgumentNullException(\"target\");\n        hashCode = target.GetHashCode();\n        InitializeHandle(target);\n    }\n\n    protected virtual void InitializeHandle(T target) {\n        handle = GCHandle.Alloc(target, GCHandleType.Weak);\n    }\n\n    ~EquatableWeakReference() {\n        Dispose();\n    }\n\n    public void Dispose() {\n        handle.Free();\n        GC.SuppressFinalize(this);\n    }\n\n    public virtual bool IsAlive {\n        get { return (handle.Target != null); }\n    }\n\n    public virtual T Target {\n        get {\n            object o = handle.Target;\n            if ((o == null) || (!(o is T)))\n               return null;\n            else\n               return (T)o;\n            }\n    }\n\n    public override bool Equals(object other) {\n        if (other is EquatableWeakReference\u003CT>)\n            return Equals((EquatableWeakReference\u003CT>)other);\n        else\n            return false;\n    }\n\n    public override int GetHashCode() {\n        return hashCode;\n    }\n\n    public bool Equals(EquatableWeakReference\u003CT> other) {\n        return ReferenceEquals(other.Target, this.Target);\n    }\n}\n","csharp","",[190],{"type":19,"tag":27,"props":191,"children":192},{"__ignoreMap":188},[193,217,252,262,352,361,380,399,407,441,471,515,544,558,567,575,614,652,660,668,686,699,707,715,736,754,782,790,798,820,863,871,879,900,913,944,1005,1022,1031,1052,1061,1069,1077,1117,1151,1186,1195,1212,1220,1228,1253,1266,1274,1282,1328,1371,1379],{"type":19,"tag":194,"props":195,"children":198},"span",{"class":196,"line":197},"line",1,[199,205,211],{"type":19,"tag":194,"props":200,"children":202},{"style":201},"--shiki-default:#F85552;--shiki-dark:#FF79C6",[203],{"type":24,"value":204},"using",{"type":19,"tag":194,"props":206,"children":208},{"style":207},"--shiki-default:#DF69BA;--shiki-default-font-style:inherit;--shiki-dark:#8BE9FD;--shiki-dark-font-style:italic",[209],{"type":24,"value":210}," System",{"type":19,"tag":194,"props":212,"children":214},{"style":213},"--shiki-default:#5C6A72;--shiki-dark:#F8F8F2",[215],{"type":24,"value":216},";\n",{"type":19,"tag":194,"props":218,"children":220},{"class":196,"line":219},2,[221,225,229,234,239,243,248],{"type":19,"tag":194,"props":222,"children":223},{"style":201},[224],{"type":24,"value":204},{"type":19,"tag":194,"props":226,"children":227},{"style":207},[228],{"type":24,"value":210},{"type":19,"tag":194,"props":230,"children":231},{"style":213},[232],{"type":24,"value":233},".",{"type":19,"tag":194,"props":235,"children":236},{"style":207},[237],{"type":24,"value":238},"Runtime",{"type":19,"tag":194,"props":240,"children":241},{"style":213},[242],{"type":24,"value":233},{"type":19,"tag":194,"props":244,"children":245},{"style":207},[246],{"type":24,"value":247},"InteropServices",{"type":19,"tag":194,"props":249,"children":250},{"style":213},[251],{"type":24,"value":216},{"type":19,"tag":194,"props":253,"children":255},{"class":196,"line":254},3,[256],{"type":19,"tag":194,"props":257,"children":259},{"emptyLinePlaceholder":258},true,[260],{"type":24,"value":261},"\n",{"type":19,"tag":194,"props":263,"children":265},{"class":196,"line":264},4,[266,272,277,283,288,294,299,305,309,314,318,322,327,332,337,342,347],{"type":19,"tag":194,"props":267,"children":269},{"style":268},"--shiki-default:#F57D26;--shiki-dark:#FF79C6",[270],{"type":24,"value":271},"public",{"type":19,"tag":194,"props":273,"children":274},{"style":201},[275],{"type":24,"value":276}," class",{"type":19,"tag":194,"props":278,"children":280},{"style":279},"--shiki-default:#3A94C5;--shiki-dark:#8BE9FD",[281],{"type":24,"value":282}," EquatableWeakReference",{"type":19,"tag":194,"props":284,"children":285},{"style":213},[286],{"type":24,"value":287},"\u003C",{"type":19,"tag":194,"props":289,"children":291},{"style":290},"--shiki-default:#3A94C5;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic",[292],{"type":24,"value":293},"T",{"type":19,"tag":194,"props":295,"children":296},{"style":213},[297],{"type":24,"value":298},"> : ",{"type":19,"tag":194,"props":300,"children":302},{"style":301},"--shiki-default:#3A94C5;--shiki-default-font-style:inherit;--shiki-dark:#8BE9FD;--shiki-dark-font-style:italic",[303],{"type":24,"value":304},"IEquatable",{"type":19,"tag":194,"props":306,"children":307},{"style":213},[308],{"type":24,"value":287},{"type":19,"tag":194,"props":310,"children":311},{"style":301},[312],{"type":24,"value":313},"EquatableWeakReference",{"type":19,"tag":194,"props":315,"children":316},{"style":213},[317],{"type":24,"value":287},{"type":19,"tag":194,"props":319,"children":320},{"style":301},[321],{"type":24,"value":293},{"type":19,"tag":194,"props":323,"children":324},{"style":213},[325],{"type":24,"value":326},">>, ",{"type":19,"tag":194,"props":328,"children":329},{"style":301},[330],{"type":24,"value":331},"IDisposable",{"type":19,"tag":194,"props":333,"children":334},{"style":268},[335],{"type":24,"value":336}," where",{"type":19,"tag":194,"props":338,"children":339},{"style":290},[340],{"type":24,"value":341}," T",{"type":19,"tag":194,"props":343,"children":344},{"style":213},[345],{"type":24,"value":346}," : ",{"type":19,"tag":194,"props":348,"children":349},{"style":201},[350],{"type":24,"value":351},"class\n",{"type":19,"tag":194,"props":353,"children":355},{"class":196,"line":354},5,[356],{"type":19,"tag":194,"props":357,"children":358},{"style":213},[359],{"type":24,"value":360},"{\n",{"type":19,"tag":194,"props":362,"children":364},{"class":196,"line":363},6,[365,370,375],{"type":19,"tag":194,"props":366,"children":367},{"style":268},[368],{"type":24,"value":369},"    protected",{"type":19,"tag":194,"props":371,"children":372},{"style":301},[373],{"type":24,"value":374}," GCHandle",{"type":19,"tag":194,"props":376,"children":377},{"style":213},[378],{"type":24,"value":379}," handle;\n",{"type":19,"tag":194,"props":381,"children":383},{"class":196,"line":382},7,[384,388,394],{"type":19,"tag":194,"props":385,"children":386},{"style":268},[387],{"type":24,"value":369},{"type":19,"tag":194,"props":389,"children":391},{"style":390},"--shiki-default:#3A94C5;--shiki-dark:#FF79C6",[392],{"type":24,"value":393}," int",{"type":19,"tag":194,"props":395,"children":396},{"style":213},[397],{"type":24,"value":398}," hashCode;\n",{"type":19,"tag":194,"props":400,"children":402},{"class":196,"line":401},8,[403],{"type":19,"tag":194,"props":404,"children":405},{"emptyLinePlaceholder":258},[406],{"type":24,"value":261},{"type":19,"tag":194,"props":408,"children":410},{"class":196,"line":409},9,[411,416,421,426,430,436],{"type":19,"tag":194,"props":412,"children":413},{"style":268},[414],{"type":24,"value":415},"    public",{"type":19,"tag":194,"props":417,"children":419},{"style":418},"--shiki-default:#8DA101;--shiki-dark:#50FA7B",[420],{"type":24,"value":282},{"type":19,"tag":194,"props":422,"children":423},{"style":213},[424],{"type":24,"value":425},"(",{"type":19,"tag":194,"props":427,"children":428},{"style":301},[429],{"type":24,"value":293},{"type":19,"tag":194,"props":431,"children":433},{"style":432},"--shiki-default:#5C6A72;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic",[434],{"type":24,"value":435}," target",{"type":19,"tag":194,"props":437,"children":438},{"style":213},[439],{"type":24,"value":440},") {\n",{"type":19,"tag":194,"props":442,"children":444},{"class":196,"line":443},10,[445,450,455,460,466],{"type":19,"tag":194,"props":446,"children":447},{"style":201},[448],{"type":24,"value":449},"        if",{"type":19,"tag":194,"props":451,"children":452},{"style":213},[453],{"type":24,"value":454}," (target ",{"type":19,"tag":194,"props":456,"children":457},{"style":268},[458],{"type":24,"value":459},"==",{"type":19,"tag":194,"props":461,"children":463},{"style":462},"--shiki-default:#DF69BA;--shiki-dark:#BD93F9",[464],{"type":24,"value":465}," null",{"type":19,"tag":194,"props":467,"children":468},{"style":213},[469],{"type":24,"value":470},")\n",{"type":19,"tag":194,"props":472,"children":474},{"class":196,"line":473},11,[475,480,485,490,494,500,506,510],{"type":19,"tag":194,"props":476,"children":477},{"style":201},[478],{"type":24,"value":479},"            throw",{"type":19,"tag":194,"props":481,"children":482},{"style":201},[483],{"type":24,"value":484}," new",{"type":19,"tag":194,"props":486,"children":487},{"style":301},[488],{"type":24,"value":489}," ArgumentNullException",{"type":19,"tag":194,"props":491,"children":492},{"style":213},[493],{"type":24,"value":425},{"type":19,"tag":194,"props":495,"children":497},{"style":496},"--shiki-default:#8DA101;--shiki-dark:#E9F284",[498],{"type":24,"value":499},"\"",{"type":19,"tag":194,"props":501,"children":503},{"style":502},"--shiki-default:#8DA101;--shiki-dark:#F1FA8C",[504],{"type":24,"value":505},"target",{"type":19,"tag":194,"props":507,"children":508},{"style":496},[509],{"type":24,"value":499},{"type":19,"tag":194,"props":511,"children":512},{"style":213},[513],{"type":24,"value":514},");\n",{"type":19,"tag":194,"props":516,"children":518},{"class":196,"line":517},12,[519,524,529,534,539],{"type":19,"tag":194,"props":520,"children":521},{"style":213},[522],{"type":24,"value":523},"        hashCode ",{"type":19,"tag":194,"props":525,"children":526},{"style":268},[527],{"type":24,"value":528},"=",{"type":19,"tag":194,"props":530,"children":531},{"style":213},[532],{"type":24,"value":533}," target.",{"type":19,"tag":194,"props":535,"children":536},{"style":418},[537],{"type":24,"value":538},"GetHashCode",{"type":19,"tag":194,"props":540,"children":541},{"style":213},[542],{"type":24,"value":543},"();\n",{"type":19,"tag":194,"props":545,"children":547},{"class":196,"line":546},13,[548,553],{"type":19,"tag":194,"props":549,"children":550},{"style":418},[551],{"type":24,"value":552},"        InitializeHandle",{"type":19,"tag":194,"props":554,"children":555},{"style":213},[556],{"type":24,"value":557},"(target);\n",{"type":19,"tag":194,"props":559,"children":561},{"class":196,"line":560},14,[562],{"type":19,"tag":194,"props":563,"children":564},{"style":213},[565],{"type":24,"value":566},"    }\n",{"type":19,"tag":194,"props":568,"children":570},{"class":196,"line":569},15,[571],{"type":19,"tag":194,"props":572,"children":573},{"emptyLinePlaceholder":258},[574],{"type":24,"value":261},{"type":19,"tag":194,"props":576,"children":578},{"class":196,"line":577},16,[579,583,588,593,598,602,606,610],{"type":19,"tag":194,"props":580,"children":581},{"style":268},[582],{"type":24,"value":369},{"type":19,"tag":194,"props":584,"children":585},{"style":268},[586],{"type":24,"value":587}," virtual",{"type":19,"tag":194,"props":589,"children":590},{"style":390},[591],{"type":24,"value":592}," void",{"type":19,"tag":194,"props":594,"children":595},{"style":418},[596],{"type":24,"value":597}," InitializeHandle",{"type":19,"tag":194,"props":599,"children":600},{"style":213},[601],{"type":24,"value":425},{"type":19,"tag":194,"props":603,"children":604},{"style":301},[605],{"type":24,"value":293},{"type":19,"tag":194,"props":607,"children":608},{"style":432},[609],{"type":24,"value":435},{"type":19,"tag":194,"props":611,"children":612},{"style":213},[613],{"type":24,"value":440},{"type":19,"tag":194,"props":615,"children":617},{"class":196,"line":616},17,[618,623,627,632,637,642,648],{"type":19,"tag":194,"props":619,"children":620},{"style":213},[621],{"type":24,"value":622},"        handle ",{"type":19,"tag":194,"props":624,"children":625},{"style":268},[626],{"type":24,"value":528},{"type":19,"tag":194,"props":628,"children":629},{"style":213},[630],{"type":24,"value":631}," GCHandle.",{"type":19,"tag":194,"props":633,"children":634},{"style":418},[635],{"type":24,"value":636},"Alloc",{"type":19,"tag":194,"props":638,"children":639},{"style":213},[640],{"type":24,"value":641},"(target, GCHandleType.",{"type":19,"tag":194,"props":643,"children":645},{"style":644},"--shiki-default:#35A77C;--shiki-dark:#F8F8F2",[646],{"type":24,"value":647},"Weak",{"type":19,"tag":194,"props":649,"children":650},{"style":213},[651],{"type":24,"value":514},{"type":19,"tag":194,"props":653,"children":655},{"class":196,"line":654},18,[656],{"type":19,"tag":194,"props":657,"children":658},{"style":213},[659],{"type":24,"value":566},{"type":19,"tag":194,"props":661,"children":663},{"class":196,"line":662},19,[664],{"type":19,"tag":194,"props":665,"children":666},{"emptyLinePlaceholder":258},[667],{"type":24,"value":261},{"type":19,"tag":194,"props":669,"children":671},{"class":196,"line":670},20,[672,677,681],{"type":19,"tag":194,"props":673,"children":674},{"style":213},[675],{"type":24,"value":676},"    ~",{"type":19,"tag":194,"props":678,"children":679},{"style":418},[680],{"type":24,"value":313},{"type":19,"tag":194,"props":682,"children":683},{"style":213},[684],{"type":24,"value":685},"() {\n",{"type":19,"tag":194,"props":687,"children":689},{"class":196,"line":688},21,[690,695],{"type":19,"tag":194,"props":691,"children":692},{"style":418},[693],{"type":24,"value":694},"        Dispose",{"type":19,"tag":194,"props":696,"children":697},{"style":213},[698],{"type":24,"value":543},{"type":19,"tag":194,"props":700,"children":702},{"class":196,"line":701},22,[703],{"type":19,"tag":194,"props":704,"children":705},{"style":213},[706],{"type":24,"value":566},{"type":19,"tag":194,"props":708,"children":710},{"class":196,"line":709},23,[711],{"type":19,"tag":194,"props":712,"children":713},{"emptyLinePlaceholder":258},[714],{"type":24,"value":261},{"type":19,"tag":194,"props":716,"children":718},{"class":196,"line":717},24,[719,723,727,732],{"type":19,"tag":194,"props":720,"children":721},{"style":268},[722],{"type":24,"value":415},{"type":19,"tag":194,"props":724,"children":725},{"style":390},[726],{"type":24,"value":592},{"type":19,"tag":194,"props":728,"children":729},{"style":418},[730],{"type":24,"value":731}," Dispose",{"type":19,"tag":194,"props":733,"children":734},{"style":213},[735],{"type":24,"value":685},{"type":19,"tag":194,"props":737,"children":739},{"class":196,"line":738},25,[740,745,750],{"type":19,"tag":194,"props":741,"children":742},{"style":213},[743],{"type":24,"value":744},"        handle.",{"type":19,"tag":194,"props":746,"children":747},{"style":418},[748],{"type":24,"value":749},"Free",{"type":19,"tag":194,"props":751,"children":752},{"style":213},[753],{"type":24,"value":543},{"type":19,"tag":194,"props":755,"children":757},{"class":196,"line":756},26,[758,763,768,772,778],{"type":19,"tag":194,"props":759,"children":760},{"style":213},[761],{"type":24,"value":762},"        GC.",{"type":19,"tag":194,"props":764,"children":765},{"style":418},[766],{"type":24,"value":767},"SuppressFinalize",{"type":19,"tag":194,"props":769,"children":770},{"style":213},[771],{"type":24,"value":425},{"type":19,"tag":194,"props":773,"children":775},{"style":774},"--shiki-default:#DF69BA;--shiki-default-font-style:inherit;--shiki-dark:#BD93F9;--shiki-dark-font-style:italic",[776],{"type":24,"value":777},"this",{"type":19,"tag":194,"props":779,"children":780},{"style":213},[781],{"type":24,"value":514},{"type":19,"tag":194,"props":783,"children":785},{"class":196,"line":784},27,[786],{"type":19,"tag":194,"props":787,"children":788},{"style":213},[789],{"type":24,"value":566},{"type":19,"tag":194,"props":791,"children":793},{"class":196,"line":792},28,[794],{"type":19,"tag":194,"props":795,"children":796},{"emptyLinePlaceholder":258},[797],{"type":24,"value":261},{"type":19,"tag":194,"props":799,"children":801},{"class":196,"line":800},29,[802,806,810,815],{"type":19,"tag":194,"props":803,"children":804},{"style":268},[805],{"type":24,"value":415},{"type":19,"tag":194,"props":807,"children":808},{"style":268},[809],{"type":24,"value":587},{"type":19,"tag":194,"props":811,"children":812},{"style":390},[813],{"type":24,"value":814}," bool",{"type":19,"tag":194,"props":816,"children":817},{"style":213},[818],{"type":24,"value":819}," IsAlive {\n",{"type":19,"tag":194,"props":821,"children":823},{"class":196,"line":822},30,[824,829,834,839,844,849,854,858],{"type":19,"tag":194,"props":825,"children":826},{"style":390},[827],{"type":24,"value":828},"        get",{"type":19,"tag":194,"props":830,"children":831},{"style":213},[832],{"type":24,"value":833}," { ",{"type":19,"tag":194,"props":835,"children":836},{"style":201},[837],{"type":24,"value":838},"return",{"type":19,"tag":194,"props":840,"children":841},{"style":213},[842],{"type":24,"value":843}," (handle.",{"type":19,"tag":194,"props":845,"children":846},{"style":644},[847],{"type":24,"value":848},"Target",{"type":19,"tag":194,"props":850,"children":851},{"style":268},[852],{"type":24,"value":853}," !=",{"type":19,"tag":194,"props":855,"children":856},{"style":462},[857],{"type":24,"value":465},{"type":19,"tag":194,"props":859,"children":860},{"style":213},[861],{"type":24,"value":862},"); }\n",{"type":19,"tag":194,"props":864,"children":866},{"class":196,"line":865},31,[867],{"type":19,"tag":194,"props":868,"children":869},{"style":213},[870],{"type":24,"value":566},{"type":19,"tag":194,"props":872,"children":874},{"class":196,"line":873},32,[875],{"type":19,"tag":194,"props":876,"children":877},{"emptyLinePlaceholder":258},[878],{"type":24,"value":261},{"type":19,"tag":194,"props":880,"children":882},{"class":196,"line":881},33,[883,887,891,895],{"type":19,"tag":194,"props":884,"children":885},{"style":268},[886],{"type":24,"value":415},{"type":19,"tag":194,"props":888,"children":889},{"style":268},[890],{"type":24,"value":587},{"type":19,"tag":194,"props":892,"children":893},{"style":301},[894],{"type":24,"value":341},{"type":19,"tag":194,"props":896,"children":897},{"style":213},[898],{"type":24,"value":899}," Target {\n",{"type":19,"tag":194,"props":901,"children":903},{"class":196,"line":902},34,[904,908],{"type":19,"tag":194,"props":905,"children":906},{"style":390},[907],{"type":24,"value":828},{"type":19,"tag":194,"props":909,"children":910},{"style":213},[911],{"type":24,"value":912}," {\n",{"type":19,"tag":194,"props":914,"children":916},{"class":196,"line":915},35,[917,922,927,931,936,940],{"type":19,"tag":194,"props":918,"children":919},{"style":390},[920],{"type":24,"value":921},"            object",{"type":19,"tag":194,"props":923,"children":924},{"style":213},[925],{"type":24,"value":926}," o ",{"type":19,"tag":194,"props":928,"children":929},{"style":268},[930],{"type":24,"value":528},{"type":19,"tag":194,"props":932,"children":933},{"style":213},[934],{"type":24,"value":935}," handle.",{"type":19,"tag":194,"props":937,"children":938},{"style":644},[939],{"type":24,"value":848},{"type":19,"tag":194,"props":941,"children":942},{"style":213},[943],{"type":24,"value":216},{"type":19,"tag":194,"props":945,"children":947},{"class":196,"line":946},36,[948,953,958,962,966,971,976,981,986,991,996,1000],{"type":19,"tag":194,"props":949,"children":950},{"style":201},[951],{"type":24,"value":952},"            if",{"type":19,"tag":194,"props":954,"children":955},{"style":213},[956],{"type":24,"value":957}," ((o ",{"type":19,"tag":194,"props":959,"children":960},{"style":268},[961],{"type":24,"value":459},{"type":19,"tag":194,"props":963,"children":964},{"style":462},[965],{"type":24,"value":465},{"type":19,"tag":194,"props":967,"children":968},{"style":213},[969],{"type":24,"value":970},") ",{"type":19,"tag":194,"props":972,"children":973},{"style":268},[974],{"type":24,"value":975},"||",{"type":19,"tag":194,"props":977,"children":978},{"style":213},[979],{"type":24,"value":980}," (",{"type":19,"tag":194,"props":982,"children":983},{"style":268},[984],{"type":24,"value":985},"!",{"type":19,"tag":194,"props":987,"children":988},{"style":213},[989],{"type":24,"value":990},"(o ",{"type":19,"tag":194,"props":992,"children":993},{"style":201},[994],{"type":24,"value":995},"is",{"type":19,"tag":194,"props":997,"children":998},{"style":301},[999],{"type":24,"value":341},{"type":19,"tag":194,"props":1001,"children":1002},{"style":213},[1003],{"type":24,"value":1004},")))\n",{"type":19,"tag":194,"props":1006,"children":1008},{"class":196,"line":1007},37,[1009,1014,1018],{"type":19,"tag":194,"props":1010,"children":1011},{"style":201},[1012],{"type":24,"value":1013},"               return",{"type":19,"tag":194,"props":1015,"children":1016},{"style":462},[1017],{"type":24,"value":465},{"type":19,"tag":194,"props":1019,"children":1020},{"style":213},[1021],{"type":24,"value":216},{"type":19,"tag":194,"props":1023,"children":1025},{"class":196,"line":1024},38,[1026],{"type":19,"tag":194,"props":1027,"children":1028},{"style":201},[1029],{"type":24,"value":1030},"            else\n",{"type":19,"tag":194,"props":1032,"children":1034},{"class":196,"line":1033},39,[1035,1039,1043,1047],{"type":19,"tag":194,"props":1036,"children":1037},{"style":201},[1038],{"type":24,"value":1013},{"type":19,"tag":194,"props":1040,"children":1041},{"style":213},[1042],{"type":24,"value":980},{"type":19,"tag":194,"props":1044,"children":1045},{"style":301},[1046],{"type":24,"value":293},{"type":19,"tag":194,"props":1048,"children":1049},{"style":213},[1050],{"type":24,"value":1051},")o;\n",{"type":19,"tag":194,"props":1053,"children":1055},{"class":196,"line":1054},40,[1056],{"type":19,"tag":194,"props":1057,"children":1058},{"style":213},[1059],{"type":24,"value":1060},"            }\n",{"type":19,"tag":194,"props":1062,"children":1064},{"class":196,"line":1063},41,[1065],{"type":19,"tag":194,"props":1066,"children":1067},{"style":213},[1068],{"type":24,"value":566},{"type":19,"tag":194,"props":1070,"children":1072},{"class":196,"line":1071},42,[1073],{"type":19,"tag":194,"props":1074,"children":1075},{"emptyLinePlaceholder":258},[1076],{"type":24,"value":261},{"type":19,"tag":194,"props":1078,"children":1080},{"class":196,"line":1079},43,[1081,1085,1090,1094,1099,1103,1108,1113],{"type":19,"tag":194,"props":1082,"children":1083},{"style":268},[1084],{"type":24,"value":415},{"type":19,"tag":194,"props":1086,"children":1087},{"style":268},[1088],{"type":24,"value":1089}," override",{"type":19,"tag":194,"props":1091,"children":1092},{"style":390},[1093],{"type":24,"value":814},{"type":19,"tag":194,"props":1095,"children":1096},{"style":418},[1097],{"type":24,"value":1098}," Equals",{"type":19,"tag":194,"props":1100,"children":1101},{"style":213},[1102],{"type":24,"value":425},{"type":19,"tag":194,"props":1104,"children":1105},{"style":390},[1106],{"type":24,"value":1107},"object",{"type":19,"tag":194,"props":1109,"children":1110},{"style":432},[1111],{"type":24,"value":1112}," other",{"type":19,"tag":194,"props":1114,"children":1115},{"style":213},[1116],{"type":24,"value":440},{"type":19,"tag":194,"props":1118,"children":1120},{"class":196,"line":1119},44,[1121,1125,1130,1134,1138,1142,1146],{"type":19,"tag":194,"props":1122,"children":1123},{"style":201},[1124],{"type":24,"value":449},{"type":19,"tag":194,"props":1126,"children":1127},{"style":213},[1128],{"type":24,"value":1129}," (other ",{"type":19,"tag":194,"props":1131,"children":1132},{"style":201},[1133],{"type":24,"value":995},{"type":19,"tag":194,"props":1135,"children":1136},{"style":301},[1137],{"type":24,"value":282},{"type":19,"tag":194,"props":1139,"children":1140},{"style":213},[1141],{"type":24,"value":287},{"type":19,"tag":194,"props":1143,"children":1144},{"style":301},[1145],{"type":24,"value":293},{"type":19,"tag":194,"props":1147,"children":1148},{"style":213},[1149],{"type":24,"value":1150},">)\n",{"type":19,"tag":194,"props":1152,"children":1154},{"class":196,"line":1153},45,[1155,1160,1164,1169,1173,1177,1181],{"type":19,"tag":194,"props":1156,"children":1157},{"style":201},[1158],{"type":24,"value":1159},"            return",{"type":19,"tag":194,"props":1161,"children":1162},{"style":418},[1163],{"type":24,"value":1098},{"type":19,"tag":194,"props":1165,"children":1166},{"style":213},[1167],{"type":24,"value":1168},"((",{"type":19,"tag":194,"props":1170,"children":1171},{"style":301},[1172],{"type":24,"value":313},{"type":19,"tag":194,"props":1174,"children":1175},{"style":213},[1176],{"type":24,"value":287},{"type":19,"tag":194,"props":1178,"children":1179},{"style":301},[1180],{"type":24,"value":293},{"type":19,"tag":194,"props":1182,"children":1183},{"style":213},[1184],{"type":24,"value":1185},">)other);\n",{"type":19,"tag":194,"props":1187,"children":1189},{"class":196,"line":1188},46,[1190],{"type":19,"tag":194,"props":1191,"children":1192},{"style":201},[1193],{"type":24,"value":1194},"        else\n",{"type":19,"tag":194,"props":1196,"children":1198},{"class":196,"line":1197},47,[1199,1203,1208],{"type":19,"tag":194,"props":1200,"children":1201},{"style":201},[1202],{"type":24,"value":1159},{"type":19,"tag":194,"props":1204,"children":1205},{"style":462},[1206],{"type":24,"value":1207}," false",{"type":19,"tag":194,"props":1209,"children":1210},{"style":213},[1211],{"type":24,"value":216},{"type":19,"tag":194,"props":1213,"children":1215},{"class":196,"line":1214},48,[1216],{"type":19,"tag":194,"props":1217,"children":1218},{"style":213},[1219],{"type":24,"value":566},{"type":19,"tag":194,"props":1221,"children":1223},{"class":196,"line":1222},49,[1224],{"type":19,"tag":194,"props":1225,"children":1226},{"emptyLinePlaceholder":258},[1227],{"type":24,"value":261},{"type":19,"tag":194,"props":1229,"children":1231},{"class":196,"line":1230},50,[1232,1236,1240,1244,1249],{"type":19,"tag":194,"props":1233,"children":1234},{"style":268},[1235],{"type":24,"value":415},{"type":19,"tag":194,"props":1237,"children":1238},{"style":268},[1239],{"type":24,"value":1089},{"type":19,"tag":194,"props":1241,"children":1242},{"style":390},[1243],{"type":24,"value":393},{"type":19,"tag":194,"props":1245,"children":1246},{"style":418},[1247],{"type":24,"value":1248}," GetHashCode",{"type":19,"tag":194,"props":1250,"children":1251},{"style":213},[1252],{"type":24,"value":685},{"type":19,"tag":194,"props":1254,"children":1256},{"class":196,"line":1255},51,[1257,1262],{"type":19,"tag":194,"props":1258,"children":1259},{"style":201},[1260],{"type":24,"value":1261},"        return",{"type":19,"tag":194,"props":1263,"children":1264},{"style":213},[1265],{"type":24,"value":398},{"type":19,"tag":194,"props":1267,"children":1269},{"class":196,"line":1268},52,[1270],{"type":19,"tag":194,"props":1271,"children":1272},{"style":213},[1273],{"type":24,"value":566},{"type":19,"tag":194,"props":1275,"children":1277},{"class":196,"line":1276},53,[1278],{"type":19,"tag":194,"props":1279,"children":1280},{"emptyLinePlaceholder":258},[1281],{"type":24,"value":261},{"type":19,"tag":194,"props":1283,"children":1285},{"class":196,"line":1284},54,[1286,1290,1294,1298,1302,1306,1310,1314,1319,1324],{"type":19,"tag":194,"props":1287,"children":1288},{"style":268},[1289],{"type":24,"value":415},{"type":19,"tag":194,"props":1291,"children":1292},{"style":390},[1293],{"type":24,"value":814},{"type":19,"tag":194,"props":1295,"children":1296},{"style":418},[1297],{"type":24,"value":1098},{"type":19,"tag":194,"props":1299,"children":1300},{"style":213},[1301],{"type":24,"value":425},{"type":19,"tag":194,"props":1303,"children":1304},{"style":301},[1305],{"type":24,"value":313},{"type":19,"tag":194,"props":1307,"children":1308},{"style":213},[1309],{"type":24,"value":287},{"type":19,"tag":194,"props":1311,"children":1312},{"style":301},[1313],{"type":24,"value":293},{"type":19,"tag":194,"props":1315,"children":1316},{"style":213},[1317],{"type":24,"value":1318},"> ",{"type":19,"tag":194,"props":1320,"children":1321},{"style":432},[1322],{"type":24,"value":1323},"other",{"type":19,"tag":194,"props":1325,"children":1326},{"style":213},[1327],{"type":24,"value":440},{"type":19,"tag":194,"props":1329,"children":1331},{"class":196,"line":1330},55,[1332,1336,1341,1346,1350,1355,1359,1363,1367],{"type":19,"tag":194,"props":1333,"children":1334},{"style":201},[1335],{"type":24,"value":1261},{"type":19,"tag":194,"props":1337,"children":1338},{"style":418},[1339],{"type":24,"value":1340}," ReferenceEquals",{"type":19,"tag":194,"props":1342,"children":1343},{"style":213},[1344],{"type":24,"value":1345},"(other.",{"type":19,"tag":194,"props":1347,"children":1348},{"style":644},[1349],{"type":24,"value":848},{"type":19,"tag":194,"props":1351,"children":1352},{"style":213},[1353],{"type":24,"value":1354},", ",{"type":19,"tag":194,"props":1356,"children":1357},{"style":774},[1358],{"type":24,"value":777},{"type":19,"tag":194,"props":1360,"children":1361},{"style":213},[1362],{"type":24,"value":233},{"type":19,"tag":194,"props":1364,"children":1365},{"style":644},[1366],{"type":24,"value":848},{"type":19,"tag":194,"props":1368,"children":1369},{"style":213},[1370],{"type":24,"value":514},{"type":19,"tag":194,"props":1372,"children":1374},{"class":196,"line":1373},56,[1375],{"type":19,"tag":194,"props":1376,"children":1377},{"style":213},[1378],{"type":24,"value":566},{"type":19,"tag":194,"props":1380,"children":1382},{"class":196,"line":1381},57,[1383],{"type":19,"tag":194,"props":1384,"children":1385},{"style":213},[1386],{"type":24,"value":1387},"}\n",{"type":19,"tag":20,"props":1389,"children":1390},{},[1391],{"type":19,"tag":1392,"props":1393,"children":1394},"em",{},[1395],{"type":24,"value":1396},"[)amien",{"type":19,"tag":1398,"props":1399,"children":1400},"style",{},[1401],{"type":24,"value":1402},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":188,"searchDepth":219,"depth":219,"links":1404},[],"markdown","content:blog:2006:equatable_weak_references.md","content","blog/2006/equatable_weak_references.md","blog/2006/equatable_weak_references","md","/blog/2006/equatable_weak_references/",493,0,[1415,1419,1423],{"title":1416,"date":1417,"url":1418},"HTML5 Video Cheatsheet: Optimizing videos for the web","2025-12-05T00:00:00Z","/blog/2025/html5-video-cheatsheet/",{"title":1420,"date":1421,"url":1422},"Transactions in the MongoDB EF Core Provider","2025-10-25","/blog/2025/mongodb-explicit-transactions/",{"title":1424,"date":1425,"url":1426},"Queryable Encryption with the MongoDB EF Core Provider","2025-09-22","/blog/2025/mongodb-queryable-encryption/",[],1779264596273]