Kehitysympäristö: .NET 4.0 tai uudempi
Huomautus: System.Collections.Concurrent -nimiavaruus .NET Framework 4:ssä. Kuten MSDN-dokumentaatiossa, ConcurrentDictionary toteuttaa säiketurvallisen kokoelman, johon useat säikeet voivat käyttää samanaikaisesti. ConcurrentDictionary toteuttaa IDictionary<TKey, TValue>, ja sillä on ainutlaatuisia mekanismeja avaimen/arvon lisäämiseen ja päivittämiseen. (Alla on selitys siitä, milloin ja mitä menetelmää kannattaa käyttää)
Skenaario 1: Lisää uusi kohde vain, jos avainta ei ole sanakirjassa... Käytä TryAddia. TryAdd hyväksyy avaimen ja lisäarvon sanakirjaan, palauttaa faslen, jos avainta ei ole sanakirjassa; Palautuu todeksi, jos läsnä on. public bool TryAdd(TKey key, TValue value)
Tilanne 2: Päivitä olemassa oleva avain sanakirjan Value... Käytä TryUpdatea. Jos sanakirjassa on tämä avain ja se antaa ehdollisen päivityksen, sen tulisi antaa tässä menetelmässä vertailuarvo, joka voidaan päivittää, kun nykyinen arvo vastaa vertailuarvoa (TValue comparisonValue). public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
Tilanne 3: Sanakirjaan täytyy lisätä avain/arvo; Jos avain ei ole varma, onko se olemassa sanakirjassa; Jos se on olemassa, päivitä. Jos sitä ei ole, lisää se...
Käytä AddOrUpdatea. AddOrUpdatessa on kaksi ylikuormitusta, ja nämä kaksi ylikuormitusta palauttavat arvon arvon: Ensimmäinen ylikuormitettu parametri on AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Kriteerit ovat Key ja kaksi edustajaa; Ensimmäisen delegaatin tarkoitus on delegoida, kun avainta ei ole, ja palauttaa arvo (alkuarvo). Tämä delegointifunktio palauttaa < alkuarvon, avain>. Toinen delegaatti Func < palauttaa Value, key, oldValue> ja suorittaa ensimmäisen delegaatin, jos avainta ei ole sanakirjassa (jos se on olemassa, sitä ei suoriteta; Tarkoituksena on antaa arvolle alkuperäinen arvo), ja sitten se palauttaa arvon (arvon alkuarvon); Toinen delegointi on menetelmä arvon muuttamiseen, joka vaatii myös palautusarvon (alkuperäisen arvon muuttamista lopulliseen arvoon). Func < palauttaa > Arvo, avain, oldValue julkinen TValue AddOrUpdate (TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Toisen ylikuormituksen parametri on AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) Ensimmäinen parametri on avain, toinen on silloin kun avainta ei ole, tämä arvo on arvon alkuperäinen arvo, ja kolmas on delegoitu on muutos suoritettava (Func< palauttaa Value, key, oldValue>). julkinen TValue AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>)
Tilanne 4: Lisää avaimen arvo sanakirjaan, mutta jos avain on jo olemassa, poista arvo; Muuten se lisätään Ensimmäinen ylikuormitus: GetOrAdd (TKEY, Func<TKey, TValue>valueFactory) Ensimmäinen parametri on avain, toinen parametri delegoidaan Func<value, key>, kun avainta ei ole, muuttuja välitetään avaimena ja arvo muuttuu. ja luo avain ja arvo, palauttaen arvoarvon.
2. Toinen ylikuormitus: GetOrAdd (TKEY, TValue) Ensimmäinen parametri on avain, ja toisen parametrin tarkoitus on luoda avaimen antama uusi arvo, kun sitä ei ole olemassa. Palauttaa arvoa. public TValue GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) julkinen TValue GetOrAdd(TKEY, TValue)
Jokainen AddOrUpdate- ja GetOrAdd-toiminto on menetelmä, jonka ConcurrentDictionary käyttää sanakirjan muokkaamiseen/kirjoittamiseen, mikä takaa säikeen turvallisuuden (se tehdään lukittomalla tavalla, lukemalla dataa sanakirjasta). |