HybridDictionary Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Implementerar IDictionary med hjälp av en ListDictionary stund samlingen är liten och växlar sedan till en Hashtable när samlingen blir stor.
public ref class HybridDictionary : System::Collections::IDictionary
public class HybridDictionary : System.Collections.IDictionary
[System.Serializable]
public class HybridDictionary : System.Collections.IDictionary
type HybridDictionary = class
interface ICollection
interface IEnumerable
interface IDictionary
[<System.Serializable>]
type HybridDictionary = class
interface IDictionary
interface ICollection
interface IEnumerable
Public Class HybridDictionary
Implements IDictionary
- Arv
-
HybridDictionary
- Härledda
- Attribut
- Implementeringar
Exempel
I följande kodexempel visas flera av egenskaperna och metoderna HybridDictionaryför .
using System;
using System.Collections;
using System.Collections.Specialized;
public class SamplesHybridDictionary {
public static void Main() {
// Creates and initializes a new HybridDictionary.
HybridDictionary myCol = new HybridDictionary();
myCol.Add( "Braeburn Apples", "1.49" );
myCol.Add( "Fuji Apples", "1.29" );
myCol.Add( "Gala Apples", "1.49" );
myCol.Add( "Golden Delicious Apples", "1.29" );
myCol.Add( "Granny Smith Apples", "0.89" );
myCol.Add( "Red Delicious Apples", "0.99" );
myCol.Add( "Plantain Bananas", "1.49" );
myCol.Add( "Yellow Bananas", "0.79" );
myCol.Add( "Strawberries", "3.33" );
myCol.Add( "Cranberries", "5.98" );
myCol.Add( "Navel Oranges", "1.29" );
myCol.Add( "Grapes", "1.99" );
myCol.Add( "Honeydew Melon", "0.59" );
myCol.Add( "Seedless Watermelon", "0.49" );
myCol.Add( "Pineapple", "1.49" );
myCol.Add( "Nectarine", "1.99" );
myCol.Add( "Plums", "1.69" );
myCol.Add( "Peaches", "1.99" );
// Display the contents of the collection using foreach. This is the preferred method.
Console.WriteLine( "Displays the elements using foreach:" );
PrintKeysAndValues1( myCol );
// Display the contents of the collection using the enumerator.
Console.WriteLine( "Displays the elements using the IDictionaryEnumerator:" );
PrintKeysAndValues2( myCol );
// Display the contents of the collection using the Keys, Values, Count, and Item properties.
Console.WriteLine( "Displays the elements using the Keys, Values, Count, and Item properties:" );
PrintKeysAndValues3( myCol );
// Copies the HybridDictionary to an array with DictionaryEntry elements.
DictionaryEntry[] myArr = new DictionaryEntry[myCol.Count];
myCol.CopyTo( myArr, 0 );
// Displays the values in the array.
Console.WriteLine( "Displays the elements in the array:" );
Console.WriteLine( " KEY VALUE" );
for ( int i = 0; i < myArr.Length; i++ )
Console.WriteLine( " {0,-25} {1}", myArr[i].Key, myArr[i].Value );
Console.WriteLine();
// Searches for a key.
if ( myCol.Contains( "Kiwis" ) )
Console.WriteLine( "The collection contains the key \"Kiwis\"." );
else
Console.WriteLine( "The collection does not contain the key \"Kiwis\"." );
Console.WriteLine();
// Deletes a key.
myCol.Remove( "Plums" );
Console.WriteLine( "The collection contains the following elements after removing \"Plums\":" );
PrintKeysAndValues1( myCol );
// Clears the entire collection.
myCol.Clear();
Console.WriteLine( "The collection contains the following elements after it is cleared:" );
PrintKeysAndValues1( myCol );
}
// Uses the foreach statement which hides the complexity of the enumerator.
// NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
public static void PrintKeysAndValues1( IDictionary myCol ) {
Console.WriteLine( " KEY VALUE" );
foreach ( DictionaryEntry de in myCol )
Console.WriteLine( " {0,-25} {1}", de.Key, de.Value );
Console.WriteLine();
}
// Uses the enumerator.
// NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
public static void PrintKeysAndValues2( IDictionary myCol ) {
IDictionaryEnumerator myEnumerator = myCol.GetEnumerator();
Console.WriteLine( " KEY VALUE" );
while ( myEnumerator.MoveNext() )
Console.WriteLine( " {0,-25} {1}", myEnumerator.Key, myEnumerator.Value );
Console.WriteLine();
}
// Uses the Keys, Values, Count, and Item properties.
public static void PrintKeysAndValues3( HybridDictionary myCol ) {
String[] myKeys = new String[myCol.Count];
myCol.Keys.CopyTo( myKeys, 0 );
Console.WriteLine( " INDEX KEY VALUE" );
for ( int i = 0; i < myCol.Count; i++ )
Console.WriteLine( " {0,-5} {1,-25} {2}", i, myKeys[i], myCol[myKeys[i]] );
Console.WriteLine();
}
}
/*
This code produces output similar to the following:
Displays the elements using foreach:
KEY VALUE
Strawberries 3.33
Yellow Bananas 0.79
Cranberries 5.98
Grapes 1.99
Granny Smith Apples 0.89
Seedless Watermelon 0.49
Honeydew Melon 0.59
Red Delicious Apples 0.99
Navel Oranges 1.29
Fuji Apples 1.29
Plantain Bananas 1.49
Gala Apples 1.49
Pineapple 1.49
Plums 1.69
Braeburn Apples 1.49
Peaches 1.99
Golden Delicious Apples 1.29
Nectarine 1.99
Displays the elements using the IDictionaryEnumerator:
KEY VALUE
Strawberries 3.33
Yellow Bananas 0.79
Cranberries 5.98
Grapes 1.99
Granny Smith Apples 0.89
Seedless Watermelon 0.49
Honeydew Melon 0.59
Red Delicious Apples 0.99
Navel Oranges 1.29
Fuji Apples 1.29
Plantain Bananas 1.49
Gala Apples 1.49
Pineapple 1.49
Plums 1.69
Braeburn Apples 1.49
Peaches 1.99
Golden Delicious Apples 1.29
Nectarine 1.99
Displays the elements using the Keys, Values, Count, and Item properties:
INDEX KEY VALUE
0 Strawberries 3.33
1 Yellow Bananas 0.79
2 Cranberries 5.98
3 Grapes 1.99
4 Granny Smith Apples 0.89
5 Seedless Watermelon 0.49
6 Honeydew Melon 0.59
7 Red Delicious Apples 0.99
8 Navel Oranges 1.29
9 Fuji Apples 1.29
10 Plantain Bananas 1.49
11 Gala Apples 1.49
12 Pineapple 1.49
13 Plums 1.69
14 Braeburn Apples 1.49
15 Peaches 1.99
16 Golden Delicious Apples 1.29
17 Nectarine 1.99
Displays the elements in the array:
KEY VALUE
Strawberries 3.33
Yellow Bananas 0.79
Cranberries 5.98
Grapes 1.99
Granny Smith Apples 0.89
Seedless Watermelon 0.49
Honeydew Melon 0.59
Red Delicious Apples 0.99
Navel Oranges 1.29
Fuji Apples 1.29
Plantain Bananas 1.49
Gala Apples 1.49
Pineapple 1.49
Plums 1.69
Braeburn Apples 1.49
Peaches 1.99
Golden Delicious Apples 1.29
Nectarine 1.99
The collection does not contain the key "Kiwis".
The collection contains the following elements after removing "Plums":
KEY VALUE
Strawberries 3.33
Yellow Bananas 0.79
Cranberries 5.98
Grapes 1.99
Granny Smith Apples 0.89
Seedless Watermelon 0.49
Honeydew Melon 0.59
Red Delicious Apples 0.99
Navel Oranges 1.29
Fuji Apples 1.29
Plantain Bananas 1.49
Gala Apples 1.49
Pineapple 1.49
Braeburn Apples 1.49
Peaches 1.99
Golden Delicious Apples 1.29
Nectarine 1.99
The collection contains the following elements after it is cleared:
KEY VALUE
*/
Imports System.Collections
Imports System.Collections.Specialized
Public Class SamplesHybridDictionary
Public Shared Sub Main()
' Creates and initializes a new HybridDictionary.
Dim myCol As New HybridDictionary()
myCol.Add("Braeburn Apples", "1.49")
myCol.Add("Fuji Apples", "1.29")
myCol.Add("Gala Apples", "1.49")
myCol.Add("Golden Delicious Apples", "1.29")
myCol.Add("Granny Smith Apples", "0.89")
myCol.Add("Red Delicious Apples", "0.99")
myCol.Add("Plantain Bananas", "1.49")
myCol.Add("Yellow Bananas", "0.79")
myCol.Add("Strawberries", "3.33")
myCol.Add("Cranberries", "5.98")
myCol.Add("Navel Oranges", "1.29")
myCol.Add("Grapes", "1.99")
myCol.Add("Honeydew Melon", "0.59")
myCol.Add("Seedless Watermelon", "0.49")
myCol.Add("Pineapple", "1.49")
myCol.Add("Nectarine", "1.99")
myCol.Add("Plums", "1.69")
myCol.Add("Peaches", "1.99")
' Display the contents of the collection using For Each. This is the preferred method.
Console.WriteLine("Displays the elements using For Each:")
PrintKeysAndValues1(myCol)
' Display the contents of the collection using the enumerator.
Console.WriteLine("Displays the elements using the IDictionaryEnumerator:")
PrintKeysAndValues2(myCol)
' Display the contents of the collection using the Keys, Values, Count, and Item properties.
Console.WriteLine("Displays the elements using the Keys, Values, Count, and Item properties:")
PrintKeysAndValues3(myCol)
' Copies the HybridDictionary to an array with DictionaryEntry elements.
Dim myArr(myCol.Count) As DictionaryEntry
myCol.CopyTo(myArr, 0)
' Displays the values in the array.
Console.WriteLine("Displays the elements in the array:")
Console.WriteLine(" KEY VALUE")
Dim i As Integer
For i = 0 To myArr.Length - 1
Console.WriteLine(" {0,-25} {1}", myArr(i).Key, myArr(i).Value)
Next i
Console.WriteLine()
' Searches for a key.
If myCol.Contains("Kiwis") Then
Console.WriteLine("The collection contains the key ""Kiwis"".")
Else
Console.WriteLine("The collection does not contain the key ""Kiwis"".")
End If
Console.WriteLine()
' Deletes a key.
myCol.Remove("Plums")
Console.WriteLine("The collection contains the following elements after removing ""Plums"":")
PrintKeysAndValues1(myCol)
' Clears the entire collection.
myCol.Clear()
Console.WriteLine("The collection contains the following elements after it is cleared:")
PrintKeysAndValues1(myCol)
End Sub
' Uses the For Each statement which hides the complexity of the enumerator.
' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
Public Shared Sub PrintKeysAndValues1(myCol As IDictionary)
Console.WriteLine(" KEY VALUE")
Dim de As DictionaryEntry
For Each de In myCol
Console.WriteLine(" {0,-25} {1}", de.Key, de.Value)
Next de
Console.WriteLine()
End Sub
' Uses the enumerator.
' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
Public Shared Sub PrintKeysAndValues2(myCol As IDictionary)
Dim myEnumerator As IDictionaryEnumerator = myCol.GetEnumerator()
Console.WriteLine(" KEY VALUE")
While myEnumerator.MoveNext()
Console.WriteLine(" {0,-25} {1}", myEnumerator.Key, myEnumerator.Value)
End While
Console.WriteLine()
End Sub
' Uses the Keys, Values, Count, and Item properties.
Public Shared Sub PrintKeysAndValues3(myCol As HybridDictionary)
Dim myKeys(myCol.Count) As [String]
myCol.Keys.CopyTo(myKeys, 0)
Console.WriteLine(" INDEX KEY VALUE")
Dim i As Integer
For i = 0 To myCol.Count - 1
Console.WriteLine(" {0,-5} {1,-25} {2}", i, myKeys(i), myCol(myKeys(i)))
Next i
Console.WriteLine()
End Sub
End Class
'This code produces output similar to the following:
'
'Displays the elements using For Each:
' KEY VALUE
' Strawberries 3.33
' Yellow Bananas 0.79
' Cranberries 5.98
' Grapes 1.99
' Granny Smith Apples 0.89
' Seedless Watermelon 0.49
' Honeydew Melon 0.59
' Red Delicious Apples 0.99
' Navel Oranges 1.29
' Fuji Apples 1.29
' Plantain Bananas 1.49
' Gala Apples 1.49
' Pineapple 1.49
' Plums 1.69
' Braeburn Apples 1.49
' Peaches 1.99
' Golden Delicious Apples 1.29
' Nectarine 1.99
'
'Displays the elements using the IDictionaryEnumerator:
' KEY VALUE
' Strawberries 3.33
' Yellow Bananas 0.79
' Cranberries 5.98
' Grapes 1.99
' Granny Smith Apples 0.89
' Seedless Watermelon 0.49
' Honeydew Melon 0.59
' Red Delicious Apples 0.99
' Navel Oranges 1.29
' Fuji Apples 1.29
' Plantain Bananas 1.49
' Gala Apples 1.49
' Pineapple 1.49
' Plums 1.69
' Braeburn Apples 1.49
' Peaches 1.99
' Golden Delicious Apples 1.29
' Nectarine 1.99
'
'Displays the elements using the Keys, Values, Count, and Item properties:
' INDEX KEY VALUE
' 0 Strawberries 3.33
' 1 Yellow Bananas 0.79
' 2 Cranberries 5.98
' 3 Grapes 1.99
' 4 Granny Smith Apples 0.89
' 5 Seedless Watermelon 0.49
' 6 Honeydew Melon 0.59
' 7 Red Delicious Apples 0.99
' 8 Navel Oranges 1.29
' 9 Fuji Apples 1.29
' 10 Plantain Bananas 1.49
' 11 Gala Apples 1.49
' 12 Pineapple 1.49
' 13 Plums 1.69
' 14 Braeburn Apples 1.49
' 15 Peaches 1.99
' 16 Golden Delicious Apples 1.29
' 17 Nectarine 1.99
'
'Displays the elements in the array:
' KEY VALUE
' Strawberries 3.33
' Yellow Bananas 0.79
' Cranberries 5.98
' Grapes 1.99
' Granny Smith Apples 0.89
' Seedless Watermelon 0.49
' Honeydew Melon 0.59
' Red Delicious Apples 0.99
' Navel Oranges 1.29
' Fuji Apples 1.29
' Plantain Bananas 1.49
' Gala Apples 1.49
' Pineapple 1.49
' Plums 1.69
' Braeburn Apples 1.49
' Peaches 1.99
' Golden Delicious Apples 1.29
' Nectarine 1.99
'
'The collection does not contain the key "Kiwis".
'
'The collection contains the following elements after removing "Plums":
' KEY VALUE
' Strawberries 3.33
' Yellow Bananas 0.79
' Cranberries 5.98
' Grapes 1.99
' Granny Smith Apples 0.89
' Seedless Watermelon 0.49
' Honeydew Melon 0.59
' Red Delicious Apples 0.99
' Navel Oranges 1.29
' Fuji Apples 1.29
' Plantain Bananas 1.49
' Gala Apples 1.49
' Pineapple 1.49
' Braeburn Apples 1.49
' Peaches 1.99
' Golden Delicious Apples 1.29
' Nectarine 1.99
'
'The collection contains the following elements after it is cleared:
' KEY VALUE
Kommentarer
Den här klassen rekommenderas för fall där antalet element i en ordlista är okänt. Den drar nytta av den förbättrade prestandan hos en ListDictionary med små samlingar och erbjuder flexibiliteten att byta till en Hashtable, som hanterar större samlingar bättre än ListDictionary.
Om den ursprungliga storleken på samlingen är större än den optimala storleken för en ListDictionarylagras samlingen i en Hashtable för att undvika omkostnaderna för att kopiera element från ListDictionary till en Hashtable.
Konstruktorn accepterar en boolesk parameter som gör att användaren kan ange om samlingen ignorerar fallet när strängar jämförs. Om samlingen är skiftlägeskänslig använder den nyckelns implementeringar av Object.GetHashCode och Object.Equals. Om samlingen är skiftlägeskänslig utför den en enkel ordningstalsfallsokänslig jämförelse, som endast följer höljereglerna för den invarianta kulturen. Som standard är samlingen skiftlägeskänslig. Mer information om den invarianta kulturen System.Globalization.CultureInfofinns i .
En nyckel kan inte vara null, men ett värde kan.
Instruktionen foreach för C#-språket (For Each i Visual Basic) returnerar ett objekt av typen av element i samlingen. Eftersom varje element i HybridDictionary är ett nyckel/värde-par är elementtypen inte typen av nyckel eller typen av värde. Elementtypen är DictionaryEntryi stället . Ett exempel:
foreach (DictionaryEntry de in myHybridDictionary)
{
//...
}
For Each de In myHybridDictionary
'...
Next
-instruktionen foreach är en omslutning runt uppräknaren, som endast tillåter läsning från, inte skriva till, samlingen.
Konstruktorer
| Name | Description |
|---|---|
| HybridDictionary() |
Skapar ett tomt skiftlägeskänsligt HybridDictionary. |
| HybridDictionary(Boolean) |
Skapar en tom HybridDictionary med angiven skiftlägeskänslighet. |
| HybridDictionary(Int32, Boolean) |
Skapar en HybridDictionary med den angivna initiala storleken och skiftlägeskänsligheten. |
| HybridDictionary(Int32) |
Skapar ett skiftlägeskänsligt HybridDictionary med den angivna initiala storleken. |
Egenskaper
| Name | Description |
|---|---|
| Count |
Hämtar antalet nyckel/värde-par som finns i HybridDictionary. |
| IsFixedSize |
Hämtar ett värde som anger om har HybridDictionary en fast storlek. |
| IsReadOnly |
Hämtar ett värde som anger om är HybridDictionary skrivskyddat. |
| IsSynchronized |
Hämtar ett värde som anger om HybridDictionary är synkroniserat (trådsäkert). |
| Item[Object] |
Hämtar eller anger värdet som är associerat med den angivna nyckeln. |
| Keys |
Hämtar en ICollection som innehåller nycklarna i HybridDictionary. |
| SyncRoot |
Hämtar ett objekt som kan användas för att synkronisera åtkomsten HybridDictionarytill . |
| Values |
Hämtar en ICollection som innehåller värdena i HybridDictionary. |
Metoder
| Name | Description |
|---|---|
| Add(Object, Object) |
Lägger till en post med den angivna nyckeln och värdet i HybridDictionary. |
| Clear() |
Tar bort alla poster från HybridDictionary. |
| Contains(Object) |
Avgör om innehåller HybridDictionary en specifik nyckel. |
| CopyTo(Array, Int32) |
Kopierar posterna HybridDictionary till en endimensionell Array instans vid det angivna indexet. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetEnumerator() |
Returnerar en IDictionaryEnumerator som itererar via HybridDictionary. |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| Remove(Object) |
Tar bort posten med den angivna nyckeln från HybridDictionary. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
Explicita gränssnittsimplementeringar
| Name | Description |
|---|---|
| IEnumerable.GetEnumerator() |
Returnerar en IEnumerator som itererar via HybridDictionary. |
Tilläggsmetoder
| Name | Description |
|---|---|
| AsParallel(IEnumerable) |
Möjliggör parallellisering av en fråga. |
| AsQueryable(IEnumerable) |
Konverterar en IEnumerable till en IQueryable. |
| Cast<TResult>(IEnumerable) |
Omvandlar elementen i en IEnumerable till den angivna typen. |
| OfType<TResult>(IEnumerable) |
Filtrerar elementen i en IEnumerable baserat på en angiven typ. |
Gäller för
Trådsäkerhet
Offentliga statiska (Shared i Visual Basic) medlemmar av den här typen är trådsäkra. Vilka som helst instansmedlemmar garanteras inte att vara trådsäkra.
Den här implementeringen tillhandahåller ingen synkroniserad (trådsäker) omslutning för en HybridDictionary, men härledda klasser kan skapa sina egna synkroniserade versioner av HybridDictionary egenskapen SyncRoot .
Att räkna upp genom en samling är i sig inte en trådsäker procedur. Även när en samling synkroniseras kan andra trådar fortfarande ändra samlingen, vilket gör att uppräknaren genererar ett undantag. För att garantera trådsäkerheten under uppräkningen kan du antingen låsa samlingen under hela uppräkningen eller fånga undantagen från ändringar som gjorts av andra trådar.