Hashtable Класс

Определение

Представляет коллекцию пар «ключ-значение», которые упорядочены по хэш-коду ключа.

public ref class Hashtable : System::Collections::IDictionary
public ref class Hashtable : ICloneable, System::Collections::IDictionary, System::Runtime::Serialization::IDeserializationCallback, System::Runtime::Serialization::ISerializable
public class Hashtable : System.Collections.IDictionary
public class Hashtable : ICloneable, System.Collections.IDictionary, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
[System.Serializable]
public class Hashtable : ICloneable, System.Collections.IDictionary, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class Hashtable : ICloneable, System.Collections.IDictionary, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
type Hashtable = class
    interface ICollection
    interface IEnumerable
    interface IDictionary
type Hashtable = class
    interface ICollection
    interface IEnumerable
    interface IDictionary
    interface ICloneable
    interface IDeserializationCallback
    interface ISerializable
type Hashtable = class
    interface ICollection
    interface IEnumerable
    interface IDictionary
    interface ISerializable
    interface IDeserializationCallback
    interface ICloneable
[<System.Serializable>]
type Hashtable = class
    interface IDictionary
    interface ICollection
    interface IEnumerable
    interface ISerializable
    interface IDeserializationCallback
    interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Hashtable = class
    interface IDictionary
    interface ICollection
    interface IEnumerable
    interface ISerializable
    interface IDeserializationCallback
    interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Hashtable = class
    interface IDictionary
    interface ISerializable
    interface IDeserializationCallback
    interface ICloneable
    interface ICollection
    interface IEnumerable
Public Class Hashtable
Implements IDictionary
Public Class Hashtable
Implements ICloneable, IDeserializationCallback, IDictionary, ISerializable
Наследование
Hashtable
Производный
Атрибуты
Реализации

Примеры

В следующем примере показано, как создавать, инициализировать и выполнять различные функции в ключи Hashtable и значения.

using namespace System;
using namespace System::Collections;

public ref class Example
{
public:
    static void Main()
    {
        // Create a new hash table.
        //
        Hashtable^ openWith = gcnew Hashtable();
        
        // Add some elements to the hash table. There are no
        // duplicate keys, but some of the values are duplicates.
        openWith->Add("txt", "notepad.exe");
        openWith->Add("bmp", "paint.exe");
        openWith->Add("dib", "paint.exe");
        openWith->Add("rtf", "wordpad.exe");

        // The Add method throws an exception if the new key is 
        // already in the hash table.
        try
        {
            openWith->Add("txt", "winword.exe");
        }
        catch(...)
        {
            Console::WriteLine("An element with Key = \"txt\" already exists.");
        }

        // The Item property is the default property, so you 
        // can omit its name when accessing elements. 
        Console::WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);
        
        // The default Item property can be used to change the value
        // associated with a key.
        openWith["rtf"] = "winword.exe";
        Console::WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // If a key does not exist, setting the default Item property
        // for that key adds a new key/value pair.
        openWith["doc"] = "winword.exe";

        // ContainsKey can be used to test keys before inserting 
        // them.
        if (!openWith->ContainsKey("ht"))
        {
            openWith->Add("ht", "hypertrm.exe");
            Console::WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]);
        }

        // When you use foreach to enumerate hash table elements,
        // the elements are retrieved as KeyValuePair objects.
        Console::WriteLine();
        for each( DictionaryEntry de in openWith )
        {
            Console::WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
        }

        // To get the values alone, use the Values property.
        ICollection^ valueColl = openWith->Values;
        
        // The elements of the ValueCollection are strongly typed
        // with the type that was specified for hash table values.
        Console::WriteLine();
        for each( String^ s in valueColl )
        {
            Console::WriteLine("Value = {0}", s);
        }

        // To get the keys alone, use the Keys property.
        ICollection^ keyColl = openWith->Keys;
        
        // The elements of the KeyCollection are strongly typed
        // with the type that was specified for hash table keys.
        Console::WriteLine();
        for each( String^ s in keyColl )
        {
            Console::WriteLine("Key = {0}", s);
        }

        // Use the Remove method to remove a key/value pair.
        Console::WriteLine("\nRemove(\"doc\")");
        openWith->Remove("doc");

        if (!openWith->ContainsKey("doc"))
        {
            Console::WriteLine("Key \"doc\" is not found.");
        }
    }
};

int main()
{
    Example::Main();
}

/* This code example produces the following output:

An element with Key = "txt" already exists.
For key = "rtf", value = wordpad.exe.
For key = "rtf", value = winword.exe.
Value added for key = "ht": hypertrm.exe

Key = dib, Value = paint.exe
Key = txt, Value = notepad.exe
Key = ht, Value = hypertrm.exe
Key = bmp, Value = paint.exe
Key = rtf, Value = winword.exe
Key = doc, Value = winword.exe

Value = paint.exe
Value = notepad.exe
Value = hypertrm.exe
Value = paint.exe
Value = winword.exe
Value = winword.exe

Key = dib
Key = txt
Key = ht
Key = bmp
Key = rtf
Key = doc

Remove("doc")
Key "doc" is not found.
 */
using System;
using System.Collections;

class Example
{
    public static void Main()
    {
        // Create a new hash table.
        //
        Hashtable openWith = new Hashtable();

        // Add some elements to the hash table. There are no
        // duplicate keys, but some of the values are duplicates.
        openWith.Add("txt", "notepad.exe");
        openWith.Add("bmp", "paint.exe");
        openWith.Add("dib", "paint.exe");
        openWith.Add("rtf", "wordpad.exe");

        // The Add method throws an exception if the new key is
        // already in the hash table.
        try
        {
            openWith.Add("txt", "winword.exe");
        }
        catch
        {
            Console.WriteLine("An element with Key = \"txt\" already exists.");
        }

        // The Item property is the default property, so you
        // can omit its name when accessing elements.
        Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // The default Item property can be used to change the value
        // associated with a key.
        openWith["rtf"] = "winword.exe";
        Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // If a key does not exist, setting the default Item property
        // for that key adds a new key/value pair.
        openWith["doc"] = "winword.exe";

        // ContainsKey can be used to test keys before inserting
        // them.
        if (!openWith.ContainsKey("ht"))
        {
            openWith.Add("ht", "hypertrm.exe");
            Console.WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]);
        }

        // When you use foreach to enumerate hash table elements,
        // the elements are retrieved as KeyValuePair objects.
        Console.WriteLine();
        foreach( DictionaryEntry de in openWith )
        {
            Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
        }

        // To get the values alone, use the Values property.
        ICollection valueColl = openWith.Values;

        // The elements of the ValueCollection are strongly typed
        // with the type that was specified for hash table values.
        Console.WriteLine();
        foreach( string s in valueColl )
        {
            Console.WriteLine("Value = {0}", s);
        }

        // To get the keys alone, use the Keys property.
        ICollection keyColl = openWith.Keys;

        // The elements of the KeyCollection are strongly typed
        // with the type that was specified for hash table keys.
        Console.WriteLine();
        foreach( string s in keyColl )
        {
            Console.WriteLine("Key = {0}", s);
        }

        // Use the Remove method to remove a key/value pair.
        Console.WriteLine("\nRemove(\"doc\")");
        openWith.Remove("doc");

        if (!openWith.ContainsKey("doc"))
        {
            Console.WriteLine("Key \"doc\" is not found.");
        }
    }
}

/* This code example produces the following output:

An element with Key = "txt" already exists.
For key = "rtf", value = wordpad.exe.
For key = "rtf", value = winword.exe.
Value added for key = "ht": hypertrm.exe

Key = dib, Value = paint.exe
Key = txt, Value = notepad.exe
Key = ht, Value = hypertrm.exe
Key = bmp, Value = paint.exe
Key = rtf, Value = winword.exe
Key = doc, Value = winword.exe

Value = paint.exe
Value = notepad.exe
Value = hypertrm.exe
Value = paint.exe
Value = winword.exe
Value = winword.exe

Key = dib
Key = txt
Key = ht
Key = bmp
Key = rtf
Key = doc

Remove("doc")
Key "doc" is not found.
 */
Imports System.Collections

Module Example

    Sub Main()

        ' Create a new hash table.
        '
        Dim openWith As New Hashtable()

        ' Add some elements to the hash table. There are no 
        ' duplicate keys, but some of the values are duplicates.
        openWith.Add("txt", "notepad.exe")
        openWith.Add("bmp", "paint.exe")
        openWith.Add("dib", "paint.exe")
        openWith.Add("rtf", "wordpad.exe")

        ' The Add method throws an exception if the new key is 
        ' already in the hash table.
        Try
            openWith.Add("txt", "winword.exe")
        Catch
            Console.WriteLine("An element with Key = ""txt"" already exists.")
        End Try

        ' The Item property is the default property, so you 
        ' can omit its name when accessing elements. 
        Console.WriteLine("For key = ""rtf"", value = {0}.", _
            openWith("rtf"))

        ' The default Item property can be used to change the value
        ' associated with a key.
        openWith("rtf") = "winword.exe"
        Console.WriteLine("For key = ""rtf"", value = {0}.", _
            openWith("rtf"))

        ' If a key does not exist, setting the default Item property
        ' for that key adds a new key/value pair.
        openWith("doc") = "winword.exe"

        ' ContainsKey can be used to test keys before inserting 
        ' them.
        If Not openWith.ContainsKey("ht") Then
            openWith.Add("ht", "hypertrm.exe")
            Console.WriteLine("Value added for key = ""ht"": {0}", _
                openWith("ht"))
        End If

        ' When you use foreach to enumerate hash table elements,
        ' the elements are retrieved as KeyValuePair objects.
        Console.WriteLine()
        For Each de As DictionaryEntry In openWith
            Console.WriteLine("Key = {0}, Value = {1}", _
                de.Key, de.Value)
        Next de

        ' To get the values alone, use the Values property.
        Dim valueColl As ICollection = openWith.Values

        ' The elements of the ValueCollection are strongly typed
        ' with the type that was specified for hash table values.
        Console.WriteLine()
        For Each s As String In valueColl
            Console.WriteLine("Value = {0}", s)
        Next s

        ' To get the keys alone, use the Keys property.
        Dim keyColl As ICollection = openWith.Keys

        ' The elements of the KeyCollection are strongly typed
        ' with the type that was specified for hash table keys.
        Console.WriteLine()
        For Each s As String In keyColl
            Console.WriteLine("Key = {0}", s)
        Next s

        ' Use the Remove method to remove a key/value pair.
        Console.WriteLine(vbLf + "Remove(""doc"")")
        openWith.Remove("doc")

        If Not openWith.ContainsKey("doc") Then
            Console.WriteLine("Key ""doc"" is not found.")
        End If

    End Sub

End Module

' This code example produces the following output:
'
'An element with Key = "txt" already exists.
'For key = "rtf", value = wordpad.exe.
'For key = "rtf", value = winword.exe.
'Value added for key = "ht": hypertrm.exe
'
'Key = dib, Value = paint.exe
'Key = txt, Value = notepad.exe
'Key = ht, Value = hypertrm.exe
'Key = bmp, Value = paint.exe
'Key = rtf, Value = winword.exe
'Key = doc, Value = winword.exe
'
'Value = paint.exe
'Value = notepad.exe
'Value = hypertrm.exe
'Value = paint.exe
'Value = winword.exe
'Value = winword.exe
'
'Key = dib
'Key = txt
'Key = ht
'Key = bmp
'Key = rtf
'Key = doc
'
'Remove("doc")
'Key "doc" is not found.
# Create new hash table using PowerShell syntax
$OpenWith = @{}

# Add one element to the hash table using the Add method
$OpenWith.Add('txt', 'notepad.exe')

# Add three eleements using PowerShell syntax three different ways
$OpenWith.dib = 'paint.exe'

$KeyBMP = 'bmp'
$OpenWith[$KeyBMP] = 'paint.exe'

$OpenWith += @{'rtf' = 'wordpad.exe'}

# Display hash table
"There are {0} in the `$OpenWith hash table as follows:" -f $OpenWith.Count
''

# Display hashtable properties
'Count of items in the hashtable  : {0}' -f $OpenWith.Count
'Is hashtable fixed size?         : {0}' -f $OpenWith.IsFixedSize
'Is hashtable read-only?          : {0}' -f $OpenWith.IsReadonly
'Is hashtabale synchronised?      : {0}' -f $OpenWith.IsSynchronized
''
'Keys in hashtable:'
$OpenWith.Keys
''
'Values in hashtable:'
$OpenWith.Values
''

<#
This script produces the following output:

There are 4 in the $OpenWith hash table as follows:

Name                           Value                                                                            
----                           -----                                                                            
txt                            notepad.exe                                                                      
dib                            paint.exe                                                                        
bmp                            paint.exe                                                                        
rtf                            wordpad.exe                                                                      

Count of items in the hashtable  : 4
Is hashtable fixed size?         : False
Is hashtable read-only?          : False
Is hashtabale synchronised?      : False

Keys in hashtable:
txt
dib
bmp
rtf

Values in hashtable:
notepad.exe
paint.exe
paint.exe
wordpad.exe
#>

Комментарии

Каждый элемент представляет собой пару "ключ-значение", хранящуюся в объекте DictionaryEntry . Ключ не может быть null, но значение может быть.

Важно!

Мы не рекомендуем использовать Hashtable класс для новой разработки. Вместо этого рекомендуется использовать универсальный Dictionary<TKey,TValue> класс. Дополнительные сведения см. в статье, не относящийся к универсальным коллекциям, не следует использовать в GitHub.

Объекты, используемые в качестве ключей, Hashtable необходимы для переопределения Object.GetHashCode метода (или IHashCodeProvider интерфейса) и Object.Equals метода (или IComparer интерфейса). Реализация обоих методов и интерфейсов должна обрабатывать чувствительность регистра одинаково; Hashtable в противном случае поведение может быть неправильно. Например, при создании Hashtableкласса необходимо использовать CaseInsensitiveHashCodeProvider класс (или любую реализацию без учета регистра IHashCodeProvider ) с классом CaseInsensitiveComparer (или любой реализацией без учета IComparer регистра).

Кроме того, эти методы должны получать те же результаты при вызове с теми же параметрами, когда ключ существует в Hashtable. Альтернативой является использование конструктора Hashtable с параметром IEqualityComparer . Если бы ключевое равенство было просто эталонным равенством, унаследованная реализация Object.GetHashCode и Object.Equals будет достаточной.

Ключевые объекты должны быть неизменяемыми, если они используются в качестве ключей в .Hashtable

Когда элемент добавляется в Hashtableконтейнер, он помещается в контейнер на основе хэш-кода ключа. Последующие поиски ключа используют хэш-код ключа для поиска только в одном конкретном контейнере, что значительно сокращает количество сравнений ключей, необходимых для поиска элемента.

Коэффициент нагрузки Hashtable определяет максимальное соотношение элементов к контейнерам. Меньшие факторы нагрузки приводят к ускорению среднего времени поиска за счет увеличения потребления памяти. Коэффициент нагрузки по умолчанию 1.0 обычно обеспечивает оптимальный баланс между скоростью и размером. При создании также можно указать другой коэффициент нагрузки Hashtable .

По мере добавления элементов в Hashtableобъект фактический коэффициент нагрузки Hashtable увеличивается. Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически Hashtable увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего Hashtable числа контейнеров.

Каждый объект ключа в объекте Hashtable должен предоставлять собственную хэш-функцию, доступ к которой можно получить путем вызова GetHash. Однако любой объект, реализующий объект IHashCodeProvider , можно передать конструктору Hashtable , и эта хэш-функция используется для всех объектов в таблице.

Емкость объекта Hashtable — это количество элементов, которые могут содержаться Hashtable . По мере добавления элементов в Hashtableобъект емкость автоматически увеличивается при необходимости при перемещении.

только платформа .NET Framework. Для очень больших Hashtable объектов можно увеличить максимальную емкость до 2 миллиардов элементов в 64-разрядной системе, задав enabled атрибут <gcAllowVeryLargeObjects> элемента true конфигурации в среде выполнения.

Оператор foreach языка C# (For Eachв Visual Basic) возвращает объект типа элементов в коллекции. Так как каждый элемент Hashtable является парой "ключ-значение", тип элемента не является типом ключа или типом значения. Вместо этого используется DictionaryEntryтип элемента . Пример:

for each(DictionaryEntry de in myHashtable)
{
    // ...
}
foreach(DictionaryEntry de in myHashtable)
{
    // ...
}
For Each de As DictionaryEntry In myHashtable
    ' ...
Next de

Оператор foreach является оболочкой вокруг перечислителя, который позволяет только считывать из коллекции, а не записывать в нее.

Так как сериализация и десериализация перечислителя для элемента Hashtable может привести к переупорядочению элементов, невозможно продолжить перечисление без вызова Reset метода.

Примечание

Поскольку ключи могут наследоваться и их поведение изменено, их абсолютная уникальность не может быть гарантирована сравнением с помощью Equals метода.

Конструкторы

Hashtable()

Инициализирует новый пустой экземпляр класса Hashtable с заданными по умолчанию начальной емкостью, показателем загрузки, поставщиком хэш-кода и объектом сравнения.

Hashtable(IDictionary)

Инициализирует новый пустой экземпляр класса Hashtable посредством копирования элементов из указанного словаря в новый объект Hashtable. У нового объекта Hashtable исходная емкость равна числу копируемых элементов, и он обладает заданными по умолчанию показателем загрузки, поставщиком хэш-кода и объектом сравнения.

Hashtable(IDictionary, IEqualityComparer)

Инициализирует новый пустой экземпляр класса Hashtable посредством копирования элементов из указанного словаря в новый объект Hashtable. У нового объекта Hashtable исходная емкость равна числу копируемых элементов, и он обладает заданным по умолчанию показателем загрузки и указанным объектом сравнения IEqualityComparer.

Hashtable(IDictionary, IHashCodeProvider, IComparer)
Является устаревшей.
Является устаревшей.

Инициализирует новый пустой экземпляр класса Hashtable посредством копирования элементов из указанного словаря в новый объект Hashtable. У нового объекта Hashtable исходная емкость равна числу копируемых элементов, и он обладает заданным по умолчанию показателем загрузки и указанными поставщиком хэш-кода и объектом сравнения. Этот API устарел. См. Hashtable(IDictionary, IEqualityComparer) для альтернативных шагов.

Hashtable(IDictionary, Single)

Инициализирует новый пустой экземпляр класса Hashtable посредством копирования элементов из указанного словаря в новый объект Hashtable. У нового объекта Hashtable исходная емкость равна числу копируемых элементов, и он обладает указанным показателем загрузки и заданными по умолчанию поставщиком хэш-кода и объектом сравнения.

Hashtable(IDictionary, Single, IEqualityComparer)

Инициализирует новый пустой экземпляр класса Hashtable посредством копирования элементов из указанного словаря в новый объект Hashtable. У нового объекта Hashtable исходная емкость равна числу копируемых элементов, и он обладает указанными показателем загрузки и объектом сравнения IEqualityComparer.

Hashtable(IDictionary, Single, IHashCodeProvider, IComparer)
Является устаревшей.
Является устаревшей.

Инициализирует новый пустой экземпляр класса Hashtable посредством копирования элементов из указанного словаря в новый объект Hashtable. У нового объекта Hashtable исходная емкость равна числу копируемых элементов, и он обладает указанными показателем загрузки, поставщиком хэш-кода и объектом сравнения.

Hashtable(IEqualityComparer)

Инициализирует новый пустой экземпляр класса Hashtable с заданными по умолчанию исходной емкостью и показателем загрузки и указанным объектом сравнения IEqualityComparer.

Hashtable(IHashCodeProvider, IComparer)
Является устаревшей.
Является устаревшей.
Является устаревшей.

Инициализирует новый пустой экземпляр класса Hashtable с заданными по умолчанию исходной емкостью и показателем загрузки и указанными поставщиком хэш-кода и объектом сравнения.

Hashtable(Int32)

Инициализирует новый пустой экземпляр класса Hashtable с указанной исходной емкостью и заданными по умолчанию показателем загрузки, поставщиком хэш-кода и объектом сравнения.

Hashtable(Int32, IEqualityComparer)

Инициализирует новый пустой экземпляр класса Hashtable с указанными исходной емкостью и объектом сравнения IEqualityComparer и заданным по умолчанию показателем загрузки.

Hashtable(Int32, IHashCodeProvider, IComparer)
Является устаревшей.
Является устаревшей.

Инициализирует новый пустой экземпляр класса Hashtable с указанными исходной емкостью, поставщиком хэш-кода и объектом сравнения и заданным по умолчанию показателем загрузки.

Hashtable(Int32, Single)

Инициализирует новый пустой экземпляр класса Hashtable с указанными исходной емкостью и показателем загрузки и заданными по умолчанию поставщиком хэш-кода и объектом сравнения.

Hashtable(Int32, Single, IEqualityComparer)

Инициализирует новый пустой экземпляр класса Hashtable с указанными исходной емкостью, показателем загрузки и объектом сравнения IEqualityComparer.

Hashtable(Int32, Single, IHashCodeProvider, IComparer)
Является устаревшей.
Является устаревшей.

Инициализирует новый пустой экземпляр класса Hashtable с указанными начальной емкостью, показателем загрузки, поставщиком хэш-кода и объектом сравнения.

Hashtable(SerializationInfo, StreamingContext)

Инициализирует новый пустой экземпляр класса Hashtable, который может быть сериализован с помощью объектов SerializationInfo и StreamingContext.

Свойства

comparer
Является устаревшей.
Является устаревшей.

Получает или задает интерфейс IComparer для использования применительно к коллекции Hashtable.

Count

Возвращает число пар "ключ-значение", содержащихся в словаре Hashtable.

EqualityComparer

Получает объект IEqualityComparer, предназначенный для использования применительно к коллекции Hashtable.

hcp
Является устаревшей.
Является устаревшей.

Получает или задает объект, который может распределять хэш-коды.

IsFixedSize

Получает значение, указывающее, имеет ли список Hashtable фиксированный размер.

IsReadOnly

Получает значение, указывающее, является ли объект Hashtable доступным только для чтения.

IsSynchronized

Возвращает значение, показывающее, является ли доступ к коллекции Hashtable синхронизированным (потокобезопасным).

Item[Object]

Возвращает или задает значение, связанное с указанным ключом.

Keys

Получает коллекцию ICollection, содержащую ключи из коллекции Hashtable.

SyncRoot

Получает объект, с помощью которого можно синхронизировать доступ к коллекции Hashtable.

Values

Возвращает интерфейс ICollection, содержащий значения из Hashtable.

Методы

Add(Object, Object)

Добавляет элемент с указанными ключом и значением в словарь Hashtable.

Clear()

Удаляет из коллекции Hashtable все элементы.

Clone()

Создает неполную копию Hashtable.

Contains(Object)

Определяет, содержит ли объект Hashtable указанный ключ.

ContainsKey(Object)

Определяет, содержит ли объект Hashtable указанный ключ.

ContainsValue(Object)

Определяет, содержит ли коллекция Hashtable указанное значение.

CopyTo(Array, Int32)

Копирует элементы коллекции Hashtable в экземпляр класса одномерного массива Array по указанному индексу.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetEnumerator()

Возвращает объект IDictionaryEnumerator, осуществляющий перебор Hashtable.

GetHash(Object)

Возвращает хэш-код указанного ключа.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetObjectData(SerializationInfo, StreamingContext)

Реализует интерфейс ISerializable и возвращает данные, необходимые для сериализации коллекции Hashtable.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
KeyEquals(Object, Object)

Сравнивает указанный объект класса Object с указанным ключом, который содержится в коллекции Hashtable.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
OnDeserialization(Object)

Реализует интерфейс ISerializable и вызывает событие десериализации при завершении десериализации.

Remove(Object)

Удаляет элемент с указанным ключом из Hashtable.

Synchronized(Hashtable)

Возвращает синхронизированную (потокобезопасную) оболочку коллекции Hashtable.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

IEnumerable.GetEnumerator()

Возвращает перечислитель, который осуществляет итерацию по коллекции.

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

Применяется к

Потокобезопасность

Hashtable является потокобезопасной для использования несколькими потоками чтения и одним потоком записи. Потокобезопасно для использования нескольких потоков, если только один из потоков выполняет операции записи (обновления), что позволяет выполнять операции записи без блокировки при условии, что записи сериализуются в Hashtable. Чтобы обеспечить поддержку нескольких операций записи, Hashtable необходимо выполнить через оболочку, возвращаемую методом Synchronized(Hashtable) , при условии, что потоки не считывают Hashtable объект.

Перечисление через коллекцию по сути не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.

См. также раздел