Arenduskeskkond: .NET 4.0 või uuem
Märkus: System.Collections.Concurrent nimeruum .NET raamistikus 4. Nagu MSDN dokumentatsioonis, rakendab ConcurrentDictionary lõimekindlat kogu, millele pääseb ligi mitme lõime kaudu korraga. ConcurrentDictionary rakendab IDictionary<TKey, TValue> ning sellel on mõned unikaalsed mehhanismid võtme/väärtuse lisamiseks, uuendamiseks. (Allpool on selgitus, millal ja millist meetodit kasutada)
Stsenaarium 1: Lisa uus üksus ainult siis, kui võtit sõnaraamatus ei eksisteeri... Kasuta TryAdd. TryAdd aktsepteerib võtme ja lisaväärtuse sõnastikku, tagastab fasle, kui võtit sõnastikust ei eksisteeri; Tagastab tõe, kui see on olemas. public bool TryAdd(TKey võti, TValue väärtus)
Olukord 2: Uuenda olemasolevat võtit sõnastiku Value... Kasuta TryUpdate'i. Kui sõnastikul on see võti ja see annab tingimusliku uuenduse, peaks see meetodis andma võrdlusväärtuse, mida saab uuendada, kui praegune väärtus on võrdne võrdlusväärtusega (TValue võrdlusväärtus). public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
Olukord 3: Sõnastikule tuleb lisada võti/väärtus; Kui võti pole kindel, kas see sõnaraamatus eksisteerib; Kui see eksisteerib, uuenda Kui seda ei ole, lisa see...
Kasuta AddOrUpdate'i. AddOrUpdate'il on kaks ülekoormust ja need kaks ülekoormust tagastavad väärtuse väärtuse: Esimene ülekoormatud parameeter on AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Parameetrid on Key ja kaks delegaati; Esimese delegaadi eesmärk on delegeerida, kui võtit ei eksisteeri, ja tagastada väärtus (algväärtus). See delegeerimine Func tagastab < algväärtuse, võtme>. Teine delegaat Func < tagastab Value, key, oldValue> ja täidab esimese delegaadi, kui võtit sõnaraamatus ei eksisteeri (kui see eksisteerib, siis seda ei käivitata; Eesmärk on anda väärtusele algväärtus), ja seejärel tagastatakse väärtus (väärtuse algväärtus); Teine delegeerimine on meetod väärtuse muutmiseks, mis nõuab samuti tagastusväärtust (algväärtuse muutmist lõppväärtuseks). Func < tagastada > Väärtus, võti, oldValue public TValue AddOrUpdate (TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Teise ülekoormuse parameeter on AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) Esimene parameeter on võtmetähtsusega, teine siis, kui võtit ei eksisteeri, see väärtus on väärtuse algväärtus ja kolmas on delegeeritud muudatuse täitmiseks (Func< tagastab Value, key, oldValue>). public TValue AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>)
Olukord 4: Lisa võtme väärtus sõnaraamatusse, kuid kui võti juba eksisteerib, võta väärtus välja; Vastasel juhul lisatakse see Esimene ülekoormus: GetOrAdd (TKEY, Func<TKey, TValue>valueFactory) Esimene parameeter on võti, teine parameeter on delegeeritud funkt<väärtus, võti>, kui võtit ei eksisteeri, antakse muutuja võtmeks ja väärtus muudetakse. ja loo võti ja väärtus, tagastades väärtusväärtuse.
2. Teine ülekoormus: GetOrAdd (TKEY, TValue) Esimene parameeter on võtmetähtsusega ja teise parameetri eesmärk on luua võtme poolt antud uus väärtus, kui seda tegelikult ei eksisteeri. Tagastab väärtuse. public TValue GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) public TValue GetOrAdd(TKEY, TValue)
Iga AddOrUpdate'i ja GetOrAddi operatsioon on meetod, mida ConcurrentDictionary kasutab sõnastikku muutmiseks/kirjutamiseks, mis tagab lõime turvalisuse (see toimub lukustamata, lugedes andmeid sõnastikust). |