ConditionalWeakTable<TKey, TValue>.TryGetValue Method

Gets the value of the specified key.

Namespace:  System.Runtime.CompilerServices
Assembly:  mscorlib (in mscorlib.dll)

public bool TryGetValue(
	TKey key,
	out TValue value


Type: TKey
The key that represents an object with an attached property.
Type: TValue%
When this method returns, contains the attached property value. If key is not found, value contains the default value.

Return Value

Type: System.Boolean
true if key is found; otherwise, false.


key is null.

If the key is garbage-collected during this operation, the method may return false and set value to the default value (as if the key were not present).

The following example defines a MainClass class and a MainInfo class, which provides information about the MainClass instance. The example calls the Add, GetOrCreateValue, and GetValue methods to add key/value pairs to a ConditionalWeakTable<TKey, TValue> table. In each case, the example calls the TryGetValue method to confirm that the key/value pair has been added to the table.

using System;
using System.Reflection;
using System.Runtime.CompilerServices;

public class MainClass
   string Name;

   public MainClass(string name)
      this.Name = name;

   public override string ToString()
      return this.Name;

// Define a class to contain information about each Example instance.
public class MainInfo
   public string Name;
   public int Methods;
   public int Properties;

   public override string ToString()
      return String.Format("{0}: {1} Methods, {2} Properties",
                           this.Name, this.Methods, this.Properties);

public class Example
   private static BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
      MainClass m1 = new MainClass("m1");
      MainClass m2 = new MainClass("m2");
      MainClass m3 = new MainClass("m3");

      MainInfo mInfo1 = new MainInfo();
      mInfo1.Name = m1.ToString();
      mInfo1.Methods = m1.GetType().GetMethods(flags).Length;
      mInfo1.Properties = m1.GetType().GetProperties(flags).Length;

      MainInfo mInfo3 = new MainInfo();
      mInfo3.Name = m3.ToString();
      mInfo3.Methods = m3.GetType().GetMethods(flags).Length;
      mInfo3.Properties = m3.GetType().GetProperties(flags).Length;

      var attached = new ConditionalWeakTable<MainClass, MainInfo>();
      MainInfo value = null;

      // Attach a property to m1 using the Add method, then retrieve it.
      attached.Add(m1, mInfo1);
      if (attached.TryGetValue(m1, out value))
         outputBlock.Text += String.Format("{0}, {1}", m1, value) + "\n";
         outputBlock.Text += String.Format("{0} does not have an attached property.", m1) + "\n";

      // Attempt to retrieve the value attached to m2.
      value = attached.GetValue(m2, Example.CreateAttachedValue);
      if (attached.TryGetValue(m2, out value))
         outputBlock.Text += String.Format("{0}, {1}", m2, value) + "\n";
         outputBlock.Text += String.Format("{0} does not have an attached property.", m2) + "\n";

      // Attempt to retrieve the value attached to m3.
      value = attached.GetOrCreateValue(m3);
      outputBlock.Text += String.Format("{0}, {1}", m3, value) + "\n";

   public static MainInfo CreateAttachedValue(MainClass m)
      MainInfo info = new MainInfo();
      info.Name = m.ToString();
      info.Methods = m.GetType().GetMethods(flags).Length;
      info.Properties = m.GetType().GetProperties(flags).Length;
      return info;
// The example displays the following output:
//       m1, m1: 4 Methods, 0 Properties
//       m2, m2: 4 Methods, 0 Properties
//       m3, : 0 Methods, 0 Properties


Supported in: 5, 4

  • SecurityCriticalAttribute 

    requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.

Community Additions