Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

ConcurrentDictionary<TKey,TValue>.TryAdd(TKey, TValue) Method

Definition

Namespace:
System.Collections.Concurrent
Assemblies:
mscorlib.dll, System.Collections.Concurrent.dll
Assemblies:
netstandard.dll, System.Collections.Concurrent.dll
Assembly:
System.Collections.Concurrent.dll
Assembly:
mscorlib.dll
Assembly:
netstandard.dll
Source:
ConcurrentDictionary.cs
Source:
ConcurrentDictionary.cs
Source:
ConcurrentDictionary.cs
Source:
ConcurrentDictionary.cs
Source:
ConcurrentDictionary.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Attempts to add the specified key and value to the 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

Parameters

key
TKey

The key of the element to add.

value
TValue

The value of the element to add. The value can be null for reference types.

Returns

true if the key/value pair was added to the ConcurrentDictionary<TKey,TValue> successfully; false if the key already exists.

Exceptions

key is null.

The dictionary contains too many elements.

Examples

The following example shows how to call the ConcurrentDictionary<TKey,TValue>.TryAdd method:

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

Remarks

This method returns false if the key already exists. Use the TryUpdate or AddOrUpdate method to update the value in case a key already exists.

Applies to

See also


Feedback

Was this page helpful?