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
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 противном случае объект может вести себя неправильно. Например, при создании необходимо использовать CaseInsensitiveHashCodeProvider класс (или любую реализацию без учета регистраIHashCodeProvider) с классом HashtableCaseInsensitiveComparer (или любую реализацию без учета регистра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 объект.
Перечисление через коллекцию по сути не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.