Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo ConditionalWeakTable<TKey, TValue>.Add (TKey, TValue)

 

Data di pubblicazione: ottobre 2016

Aggiunge una chiave alla tabella.

Spazio dei nomi:   System.Runtime.CompilerServices
Assembly:  mscorlib (in mscorlib.dll)

public void Add(
	TKey key,
	TValue value
)

Parametri

key
Type: TKey

Chiave da aggiungere. key rappresenta l'oggetto a cui è associata la proprietà.

value
Type: TValue

Valore della proprietà della chiave.

Exception Condition
ArgumentNullException

key è null.

ArgumentException

key esiste già.

Every key in a T:System.Runtime.CompilerServices.ConditionalWeakTable`2 object must be unique. Keys are not unique if they refer to the same object (that is, if passing them as arguments to the M:System.Object.ReferenceEquals(System.Object,System.Object) method returns true).

If the key is garbage-collected during the addition operation, the existing key/value pair is removed and the new key/value pair is added without an exception being thrown.

The following example defines a MainClass class and a MainInfo class, which provides information about the MainClass instance. The example then calls the M:System.Runtime.CompilerServices.ConditionalWeakTable`2.Add(`0,`1) method to add a MainClass object and its attached MainInfo object to a T:System.Runtime.CompilerServices.ConditionalWeakTable`2 table. The example also illustrates calls to the M:System.Runtime.CompilerServices.ConditionalWeakTable`2.GetOrCreateValue(`0) and M:System.Runtime.CompilerServices.ConditionalWeakTable`2.GetValue(`0,System.Runtime.CompilerServices.ConditionalWeakTable{`0,`1}.CreateValueCallback) methods to add key/value pairs to the table, and to the M:System.Runtime.CompilerServices.ConditionalWeakTable`2.TryGetValue(`0,`1@) method to retrieve the value of an existing key.

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

public class Example
{
   string Name; 

   public Example(string name)
   {
      this.Name = name;
   }

   public override string ToString()
   {
      return this.Name;
   }
}

// Define a class to contain information about each Example instance.
public class ExampleInfo
{
   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 ExampleTest
{
   private static BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;

   public static void Main()
   {
      Example ex1 = new Example("ex1");
      Example ex2 = new Example("ex2");
      Example ex3 = new Example("ex3");

      ExampleInfo exInfo1 = new ExampleInfo(); 
      exInfo1.Name = ex1.ToString();
      exInfo1.Methods = ex1.GetType().GetMethods(flags).Length;
      exInfo1.Properties = ex1.GetType().GetProperties(flags).Length;

      ExampleInfo exInfo3 = new ExampleInfo(); 
      exInfo3.Name = ex3.ToString();
      exInfo3.Methods = ex3.GetType().GetMethods(flags).Length;
      exInfo3.Properties = ex3.GetType().GetProperties(flags).Length;

      var attached = new ConditionalWeakTable<Example, ExampleInfo>();
      ExampleInfo value = null;

      // Attach a property to ex1 using the Add method, then retrieve it.
      attached.Add(ex1, exInfo1);
      if (attached.TryGetValue(ex1, out value))
         Console.WriteLine("{0}, {1}", ex1, value);
      else
         Console.WriteLine("{0} does not have an attached property.", ex1);

      // Attempt to retrieve the value attached to ex2.
      value = attached.GetValue(ex2, ExampleTest.CreateAttachedValue);      
      if (attached.TryGetValue(ex2, out value))
         Console.WriteLine("{0}, {1}", ex2, value);
      else 
         Console.WriteLine("{0} does not have an attached property.", ex2);

      // Attempt to retrieve the value attached to ex3.
      value = attached.GetOrCreateValue(ex3);
      Console.WriteLine("{0}, {1}", ex3, value);
   }

   public static ExampleInfo CreateAttachedValue(Example ex)
   {
      ExampleInfo info = new ExampleInfo();
      info.Name = ex.ToString();
      info.Methods = ex.GetType().GetMethods(flags).Length;
      info.Properties = ex.GetType().GetProperties(flags).Length;
      return info;
   }
}
// The example displays the following output:
//       ex1, ex1: 4 Methods, 0 Properties
//       ex2, ex2: 4 Methods, 0 Properties
//       ex3, : 0 Methods, 0 Properties

SecurityCriticalAttribute

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

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 4.0
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 4.0
Windows Phone Silverlight
Disponibile da 8.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: