Hashtable.GetEnumerator 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
IDictionaryEnumerator를 반복하는 Hashtable를 반환합니다.
public:
virtual System::Collections::IDictionaryEnumerator ^ GetEnumerator();
public virtual System.Collections.IDictionaryEnumerator GetEnumerator ();
abstract member GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
override this.GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
Public Overridable Function GetEnumerator () As IDictionaryEnumerator
반환
IDictionaryEnumerator에 대한 Hashtable입니다.
구현
예제
다음 예제에서는 및 foreach
를 사용하여 GetEnumerator 의 Hashtable내용을 열거하는 방법을 비교합니다.
using namespace System;
using namespace System::Collections;
public class HashtableExample
{
public:
static void Main()
{
// Creates and initializes a new Hashtable.
Hashtable^ clouds = gcnew Hashtable();
clouds->Add("Cirrus", "Castellanus");
clouds->Add("Cirrocumulus", "Stratiformis");
clouds->Add("Altostratus", "Radiatus");
clouds->Add("Stratocumulus", "Perlucidus");
clouds->Add("Stratus", "Fractus");
clouds->Add("Nimbostratus", "Pannus");
clouds->Add("Cumulus", "Humilis");
clouds->Add("Cumulonimbus", "Incus");
// Displays the keys and values of the Hashtable using GetEnumerator()
IDictionaryEnumerator^ denum = clouds->GetEnumerator();
DictionaryEntry dentry;
Console::WriteLine();
Console::WriteLine(" Cloud Type Variation");
Console::WriteLine(" -----------------------------");
while (denum->MoveNext())
{
dentry = (DictionaryEntry) denum->Current;
Console::WriteLine(" {0,-17}{1}", dentry.Key, dentry.Value);
}
Console::WriteLine();
// Displays the keys and values of the Hashtable using foreach statement
Console::WriteLine(" Cloud Type Variation");
Console::WriteLine(" -----------------------------");
for each (DictionaryEntry de in clouds)
{
Console::WriteLine(" {0,-17}{1}", de.Key, de.Value);
}
Console::WriteLine();
}
};
int main()
{
HashtableExample::Main();
}
// The program displays the following output to the console:
//
// Cloud Type Variation
// -----------------------------
// Cirrocumulus Stratiformis
// Stratocumulus Perlucidus
// Cirrus Castellanus
// Cumulus Humilis
// Nimbostratus Pannus
// Stratus Fractus
// Altostratus Radiatus
// Cumulonimbus Incus
//
// Cloud Type Variation
// -----------------------------
// Cirrocumulus Stratiformis
// Stratocumulus Perlucidus
// Cirrus Castellanus
// Cumulus Humilis
// Nimbostratus Pannus
// Stratus Fractus
// Altostratus Radiatus
// Cumulonimbus Incus*/
using System;
using System.Collections;
public class HashtableExample
{
public static void Main()
{
// Creates and initializes a new Hashtable.
Hashtable clouds = new Hashtable();
clouds.Add("Cirrus", "Castellanus");
clouds.Add("Cirrocumulus", "Stratiformis");
clouds.Add("Altostratus", "Radiatus");
clouds.Add("Stratocumulus", "Perlucidus");
clouds.Add("Stratus", "Fractus");
clouds.Add("Nimbostratus", "Pannus");
clouds.Add("Cumulus", "Humilis");
clouds.Add("Cumulonimbus", "Incus");
// Displays the keys and values of the Hashtable using GetEnumerator()
IDictionaryEnumerator denum = clouds.GetEnumerator();
DictionaryEntry dentry;
Console.WriteLine();
Console.WriteLine(" Cloud Type Variation");
Console.WriteLine(" -----------------------------");
while (denum.MoveNext())
{
dentry = (DictionaryEntry) denum.Current;
Console.WriteLine(" {0,-17}{1}", dentry.Key, dentry.Value);
}
Console.WriteLine();
// Displays the keys and values of the Hashtable using foreach statement
Console.WriteLine(" Cloud Type Variation");
Console.WriteLine(" -----------------------------");
foreach (DictionaryEntry de in clouds)
{
Console.WriteLine(" {0,-17}{1}", de.Key, de.Value);
}
Console.WriteLine();
}
}
// The program displays the following output to the console:
//
// Cloud Type Variation
// -----------------------------
// Cirrocumulus Stratiformis
// Stratocumulus Perlucidus
// Cirrus Castellanus
// Cumulus Humilis
// Nimbostratus Pannus
// Stratus Fractus
// Altostratus Radiatus
// Cumulonimbus Incus
//
// Cloud Type Variation
// -----------------------------
// Cirrocumulus Stratiformis
// Stratocumulus Perlucidus
// Cirrus Castellanus
// Cumulus Humilis
// Nimbostratus Pannus
// Stratus Fractus
// Altostratus Radiatus
// Cumulonimbus Incus*/
Imports System.Collections
Public Class HashtableExample
Public Shared Sub Main()
' Creates and initializes a new Hashtable.
Dim clouds As New Hashtable()
clouds.Add("Cirrus", "Castellanus")
clouds.Add("Cirrocumulus", "Stratiformis")
clouds.Add("Altostratus", "Radiatus")
clouds.Add("Stratocumulus", "Perlucidus")
clouds.Add("Stratus", "Fractus")
clouds.Add("Nimbostratus", "Pannus")
clouds.Add("Cumulus", "Humilis")
clouds.Add("Cumulonimbus", "Incus")
' Displays the keys and values of the Hashtable using GetEnumerator()
Dim denum As IDictionaryEnumerator = clouds.GetEnumerator()
Dim dentry As DictionaryEntry
Console.WriteLine()
Console.WriteLine(" Cloud Type Variation")
Console.WriteLine(" -----------------------------")
While denum.MoveNext()
dentry = CType(denum.Current, DictionaryEntry)
Console.WriteLine(" {0,-17}{1}", dentry.Key, dentry.Value)
End While
Console.WriteLine()
' Displays the keys and values of the Hashtable using foreach statement
Console.WriteLine(" Cloud Type Variation")
Console.WriteLine(" -----------------------------")
For Each de As DictionaryEntry in clouds
Console.WriteLine(" {0,-17}{1}", de.Key, de.Value)
Next de
Console.WriteLine()
End Sub
End Class
' The program displays the following output to the console:
'
' Cloud Type Variation
' -----------------------------
' Cirrocumulus Stratiformis
' Stratocumulus Perlucidus
' Cirrus Castellanus
' Cumulus Humilis
' Nimbostratus Pannus
' Stratus Fractus
' Altostratus Radiatus
' Cumulonimbus Incus
'
' Cloud Type Variation
' -----------------------------
' Cirrocumulus Stratiformis
' Stratocumulus Perlucidus
' Cirrus Castellanus
' Cumulus Humilis
' Nimbostratus Pannus
' Stratus Fractus
' Altostratus Radiatus
' Cumulonimbus Incus*/
설명
@FSHO1@C# 언어의 foreach
문(Visual Basic의 경우 for each
)은 열거자의 복잡성을 숨깁니다. 그러므로 열거자를 직접 조작하는 대신 foreach
를 사용하는 것이 좋습니다.
열거자를 사용하여 컬렉션의 데이터를 읽을 수는 있지만 내부 컬렉션을 수정할 수는 없습니다.
처음에 열거자는 컬렉션의 첫 번째 요소 앞에 배치됩니다. Reset을 실행하면 열거자가 이 위치로 복원됩니다. 이 위치에서 Current는 정의되지 않습니다. 따라서 MoveNext의 값을 읽기 전에 Current를 호출하여 열거자를 해당 컬렉션의 첫 번째 요소로 보내야 합니다.
Current에서는 MoveNext 또는 Reset이 호출될 때까지 동일한 개체를 반환합니다. MoveNext는 Current를 다음 요소로 설정합니다.
경우 MoveNext 열거자를 컬렉션의 끝 컬렉션의 마지막 요소 뒤에 배치 되는 전달 하 고 MoveNext 반환 false
합니다. 열거자가 있는 경우이 위치에 대 한 후속 호출은 MoveNext 반환할 수도 false
합니다. 반환 false
Current 된 에 대한 MoveNext 마지막 호출이 정의되지 않은 경우 Current를 컬렉션의 첫째 요소에 다시 설정하려면 Reset을 호출한 뒤 MoveNext를 호출해야 합니다.
컬렉션이 변경되지 않고 그대로 유지되는 한 열거자는 유효한 상태로 유지됩니다. 컬렉션에 대해 변경 내용을 수행하면(예: 요소 추가, 수정 또는 삭제) 열거자는 복구 불가능하게 무효화되고 해당 동작은 정의되지 않습니다.
열거자는 컬렉션에 독점적으로 액세스할 수 있는 권한이 없으므로 컬렉션을 열거하는 프로시저는 기본적으로 스레드로부터 안전하지 않습니다. 열거 동안 스레드 보안을 보장하려면 전체 열거 동안 컬렉션을 잠그면 됩니다. 여러 스레드에서 컬렉션에 액세스하여 읽고 쓸 수 있도록 허용하려면 사용자 지정 동기화를 구현해야 합니다.
이 메서드는 작업입니다 O(1)
.
에 대한 Hashtable 열거자를 직렬화 및 역직렬화하면 요소의 순서가 다시 지정될 수 있으므로 메서드를 호출 Reset 하지 않고는 열거를 계속할 수 없습니다.
적용 대상
추가 정보
.NET