ConcurrentDictionary<TKey,TValue>.TryAdd(TKey, TValue) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Próbuje dodać określony klucz i wartość do elementu ConcurrentDictionary<TKey,TValue>.
public:
bool TryAdd(TKey key, TValue value);
public bool TryAdd (TKey key, TValue value);
member this.TryAdd : 'Key * 'Value -> bool
Public Function TryAdd (key As TKey, value As TValue) As Boolean
Parametry
- key
- TKey
Klucz elementu do dodania.
- value
- TValue
Wartość elementu do dodania. Wartość może być null
przeznaczona dla typów referencyjnych.
Zwraca
true
jeśli para klucz/wartość została dodana pomyślnie ConcurrentDictionary<TKey,TValue> ; false
jeśli klucz już istnieje.
Wyjątki
key
to null
.
Słownik zawiera zbyt wiele elementów.
Przykłady
W poniższym przykładzie pokazano, jak wywołać metodę ConcurrentDictionary<TKey,TValue>.TryAdd :
class CD_TryXYZ
{
// Demonstrates:
// ConcurrentDictionary<TKey, TValue>.TryAdd()
// ConcurrentDictionary<TKey, TValue>.TryUpdate()
// ConcurrentDictionary<TKey, TValue>.TryRemove()
static void Main()
{
int numFailures = 0; // for bookkeeping
// Construct an empty dictionary
ConcurrentDictionary<int, String> cd = new ConcurrentDictionary<int, string>();
// This should work
if (!cd.TryAdd(1, "one"))
{
Console.WriteLine("CD.TryAdd() failed when it should have succeeded");
numFailures++;
}
// This shouldn't work -- key 1 is already in use
if (cd.TryAdd(1, "uno"))
{
Console.WriteLine("CD.TryAdd() succeeded when it should have failed");
numFailures++;
}
// Now change the value for key 1 from "one" to "uno" -- should work
if (!cd.TryUpdate(1, "uno", "one"))
{
Console.WriteLine("CD.TryUpdate() failed when it should have succeeded");
numFailures++;
}
// Try to change the value for key 1 from "eine" to "one"
// -- this shouldn't work, because the current value isn't "eine"
if (cd.TryUpdate(1, "one", "eine"))
{
Console.WriteLine("CD.TryUpdate() succeeded when it should have failed");
numFailures++;
}
// Remove key/value for key 1. Should work.
string value1;
if (!cd.TryRemove(1, out value1))
{
Console.WriteLine("CD.TryRemove() failed when it should have succeeded");
numFailures++;
}
// Remove key/value for key 1. Shouldn't work, because I already removed it
string value2;
if (cd.TryRemove(1, out value2))
{
Console.WriteLine("CD.TryRemove() succeeded when it should have failed");
numFailures++;
}
// If nothing went wrong, say so
if (numFailures == 0) Console.WriteLine(" OK!");
}
}
// Demonstrates:
// ConcurrentDictionary<TKey, TValue>.TryAdd()
// ConcurrentDictionary<TKey, TValue>.TryUpdate()
// ConcurrentDictionary<TKey, TValue>.TryRemove()
let mutable numFailures = 0 // for bookkeeping
// Construct an empty dictionary
let cd = ConcurrentDictionary<int, string>()
// This should work
if cd.TryAdd(1, "one") |> not then
printfn "CD.TryAdd() failed when it should have succeeded"
numFailures <- numFailures + 1
// This shouldn't work -- key 1 is already in use
if cd.TryAdd(1, "uno") then
printfn "CD.TryAdd() succeeded when it should have failed"
numFailures <- numFailures + 1
// Now change the value for key 1 from "one" to "uno" -- should work
if cd.TryUpdate(1, "uno", "one") |> not then
printfn "CD.TryUpdate() failed when it should have succeeded"
numFailures <- numFailures + 1
// Try to change the value for key 1 from "eine" to "one"
// -- this shouldn't work, because the current value isn't "eine"
if cd.TryUpdate(1, "one", "eine") then
printfn "CD.TryUpdate() succeeded when it should have failed"
numFailures <- numFailures + 1
// Remove key/value for key 1. Should work.
let mutable value1 = ""
if cd.TryRemove(1, &value1) |> not then
printfn "CD.TryRemove() failed when it should have succeeded"
numFailures <- numFailures + 1
// Remove key/value for key 1. Shouldn't work, because I already removed it
let mutable value2 = ""
if cd.TryRemove(1, &value2) then
printfn "CD.TryRemove() succeeded when it should have failed"
numFailures <- numFailures + 1
// If nothing went wrong, say so
if numFailures = 0 then
printfn " OK!"
'Imports System.Collections.Concurrent
Class CD_TryXYZ
' Demonstrates:
' ConcurrentDictionary<TKey, TValue>.TryAdd()
' ConcurrentDictionary<TKey, TValue>.TryUpdate()
' ConcurrentDictionary<TKey, TValue>.TryRemove()
Shared Sub Main()
Dim numFailures As Integer = 0
' for bookkeeping
' Construct an empty dictionary
Dim cd As ConcurrentDictionary(Of Integer, [String]) = New ConcurrentDictionary(Of Integer, String)()
' This should work
If Not cd.TryAdd(1, "one") Then
Console.WriteLine("CD.TryAdd() failed when it should have succeeded")
numFailures += 1
End If
' This shouldn't work -- key 1 is already in use
If cd.TryAdd(1, "uno") Then
Console.WriteLine("CD.TryAdd() succeeded when it should have failed")
numFailures += 1
End If
' Now change the value for key 1 from "one" to "uno" -- should work
If Not cd.TryUpdate(1, "uno", "one") Then
Console.WriteLine("CD.TryUpdate() failed when it should have succeeded")
numFailures += 1
End If
' Try to change the value for key 1 from "eine" to "one"
' -- this shouldn't work, because the current value isn't "eine"
If cd.TryUpdate(1, "one", "eine") Then
Console.WriteLine("CD.TryUpdate() succeeded when it should have failed")
numFailures += 1
End If
' Remove key/value for key 1. Should work.
Dim value1 As String = ""
If Not cd.TryRemove(1, value1) Then
Console.WriteLine("CD.TryRemove() failed when it should have succeeded")
numFailures += 1
End If
' Remove key/value for key 1. Shouldn't work, because I already removed it
Dim value2 As String = ""
If cd.TryRemove(1, value2) Then
Console.WriteLine("CD.TryRemove() succeeded when it should have failed")
numFailures += 1
End If
' If nothing went wrong, say so
If numFailures = 0 Then
Console.WriteLine(" OK!")
End If
End Sub
End Class
Uwagi
Ta metoda zwraca wartość false
, jeśli klucz już istnieje. TryUpdate Użyj metody orAddOrUpdate, aby zaktualizować wartość w przypadku, gdy klucz już istnieje.