Dictionary<TKey,TValue>.IDictionary.GetEnumerator Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
için IDictionarybir IDictionaryEnumerator döndürür.
virtual System::Collections::IDictionaryEnumerator ^ System.Collections.IDictionary.GetEnumerator() = System::Collections::IDictionary::GetEnumerator;
System.Collections.IDictionaryEnumerator IDictionary.GetEnumerator();
abstract member System.Collections.IDictionary.GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
override this.System.Collections.IDictionary.GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
Function GetEnumerator () As IDictionaryEnumerator Implements IDictionary.GetEnumerator
Döndürülenler
için IDictionarybirIDictionaryEnumerator.
Uygulamalar
Örnekler
Aşağıdaki kod örneğinde, listeleyicinin kullanımını gizleyen deyimini (For EachVisual Basic'te) kullanarak foreach sözlükteki anahtar/değer çiftlerinin nasıl numaralandırıldığı gösterilmektedir. Özellikle, arabirimin numaralandırıcısının System.Collections.IDictionary nesneler yerine KeyValuePair<TKey,TValue> nesneler döndürdüğünü DictionaryEntry unutmayın.
using System;
using System.Collections;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
// Create a new dictionary of strings, with string keys,
// and access it using the IDictionary interface.
//
IDictionary openWith = new Dictionary<string, string>();
// Add some elements to the dictionary. There are no
// duplicate keys, but some of the values are duplicates.
// IDictionary.Add throws an exception if incorrect types
// are supplied for key or value.
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
// When you use foreach to enumerate dictionary elements
// with the IDictionary interface, the elements are retrieved
// as DictionaryEntry objects instead of KeyValuePair objects.
foreach( DictionaryEntry de in openWith )
{
Console.WriteLine($"Key = {de.Key}, Value = {de.Value}");
}
}
}
open System
open System.Collections
open System.Collections.Generic
// Create a new dictionary of strings, with string keys,
// and access it using the IDictionary interface.
let openWith: IDictionary = Dictionary<string, string>()
// Add some elements to the dictionary. There are no
// duplicate keys, but some of the values are duplicates.
// IDictionary.Add throws an exception if incorrect types
// are supplied for key or value.
openWith.Add("txt", "notepad.exe")
openWith.Add("bmp", "paint.exe")
openWith.Add("dib", "paint.exe")
openWith.Add("rtf", "wordpad.exe")
// When you use foreach to enumerate dictionary elements
// with the IDictionary interface, the elements are retrieved
// as DictionaryEntry objects instead of KeyValuePair objects.
printfn ""
for de in openWith do
let de = de :?> DictionaryEntry
printfn $"For key = {de.Key}, value = {de.Value}"
Imports System.Collections
Imports System.Collections.Generic
Public Class Example
Public Shared Sub Main()
' Create a new dictionary of strings, with string keys,
' and access it using the IDictionary interface.
'
Dim openWith As IDictionary = _
New Dictionary(Of String, String)
' Add some elements to the dictionary. There are no
' duplicate keys, but some of the values are duplicates.
' IDictionary.Add throws an exception if incorrect types
' are supplied for key or value.
openWith.Add("txt", "notepad.exe")
openWith.Add("bmp", "paint.exe")
openWith.Add("dib", "paint.exe")
openWith.Add("rtf", "wordpad.exe")
' When you use foreach to enumerate dictionary elements
' with the IDictionary interface, the elements are retrieved
' as DictionaryEntry objects instead of KeyValuePair objects.
Console.WriteLine()
For Each de As DictionaryEntry In openWith
Console.WriteLine("Key = {0}, Value = {1}", _
de.Key, de.Value)
Next
End Sub
End Class
Açıklamalar
Numaralandırma amacıyla her öğe bir DictionaryEntry yapıdır.
foreach C# dilinin deyimi (For EachVisual Basic'te) numaralandırıcıların karmaşıklığını gizler. Bu nedenle, numaralandırıcıyı doğrudan işlemek yerine kullanılması foreach önerilir.
Numaralandırıcılar koleksiyondaki verileri okumak için kullanılabilir, ancak temel koleksiyonu değiştirmek için kullanılamaz.
Başlangıçta, numaralandırıcı koleksiyondaki ilk öğeden önce konumlandırılır. Reset yöntemi ayrıca numaralandırıcıyı bu konuma geri getirir. Bu konumda tanımlanmamıştır Entry . Bu nedenle, değerini Entryokumadan önce numaralandırıcıyı koleksiyonun ilk öğesine ilerletmek için yöntemini çağırmanız MoveNext gerekir.
Entry özelliği, veya Reset yöntemi çağrılana kadar aynı öğeyi MoveNext döndürür. MoveNext bir sonraki öğeye ayarlar Entry .
Koleksiyonun sonunu geçerse MoveNext , numaralandırıcı koleksiyondaki son öğeden sonra konumlandırılır ve MoveNext döndürür false. Numaralandırıcı bu konumda olduğunda, sonraki çağrıları MoveNext da döndürür false. döndürülen falseEntry son çağrı MoveNext tanımlanmamışsa. Koleksiyonun ilk öğesine yeniden ayarlamak Entry için öğesini ve ardından MoveNextöğesini çağırabilirsinizReset.
Bir numaralandırıcı, koleksiyon değişmediği sürece geçerli kalır. Koleksiyonda öğe ekleme veya kapasiteyi değiştirme gibi değişiklikler yapılırsa, numaralandırıcı geri alınamaz şekilde geçersiz kılınmış olur ve bir sonraki çağrısı veya MoveNextIEnumerator.Reset oluşturur InvalidOperationException.
Yalnızca .NET Core 3.0+ : Numaralandırıcıları geçersiz kılmayan tek sessize alma yöntemleri ve Clear'tirRemove.
Numaralandırıcının koleksiyona özel erişimi yoktur; Bu nedenle, bir koleksiyon aracılığıyla numaralandırma, iş parçacığı açısından güvenli bir yordam değildir. Numaralandırma sırasında iş parçacığı güvenliğini garanti etmek için, tüm numaralandırma sırasında koleksiyonu kilitleyebilirsiniz. Koleksiyona okuma ve yazma için birden çok iş parçacığı tarafından erişilmesine izin vermek için kendi eşitlemenizi uygulamanız gerekir.
Ad alanında System.Collections.Generic koleksiyonların varsayılan uygulamaları eşitlenmez.
Bu yöntem bir O(1) işlemidir.