14 [DebuggerTypeProxy(typeof(HashtableDebugView))]
15 [DebuggerDisplay(
"Count = {Count}")]
37 public virtual int Count => _hashtable.count;
39 internal KeyCollection(
Hashtable hashtable)
41 _hashtable = hashtable;
44 public virtual void CopyTo(
Array array,
int arrayIndex)
58 if (array.Length - arrayIndex < _hashtable.count)
62 _hashtable.CopyKeys(array, arrayIndex);
67 return new HashtableEnumerator(_hashtable, 1);
80 public virtual int Count => _hashtable.count;
82 internal ValueCollection(
Hashtable hashtable)
84 _hashtable = hashtable;
87 public virtual void CopyTo(
Array array,
int arrayIndex)
101 if (array.Length - arrayIndex < _hashtable.count)
105 _hashtable.CopyValues(array, arrayIndex);
110 return new HashtableEnumerator(_hashtable, 2);
127 public override object this[
object key]
173 : base(info, context)
191 info.AddValue(
"ParentTable", _table, typeof(
Hashtable));
195 public override void Add(
object key,
object value)
199 _table.
Add(key, value);
203 public override void Clear()
211 public override bool Contains(
object key)
233 public override void CopyTo(
Array array,
int arrayIndex)
237 _table.
CopyTo(array, arrayIndex);
241 public override object Clone()
251 return _table.GetEnumerator();
256 return _table.GetEnumerator();
259 public override void Remove(
object key)
271 internal override KeyValuePairs[] ToKeyValuePairsArray()
273 return _table.ToKeyValuePairsArray();
286 private bool current;
288 private int getObjectRetType;
290 private object currentKey;
292 private object currentValue;
294 internal const int Keys = 1;
296 internal const int Values = 2;
298 internal const int DictEntry = 3;
300 public virtual object Key
324 public virtual object Current
332 if (getObjectRetType == 1)
336 if (getObjectRetType == 2)
344 public virtual object Value
356 internal HashtableEnumerator(
Hashtable hashtable,
int getObjRetType)
358 this.hashtable = hashtable;
359 bucket = hashtable.buckets.Length;
360 version = hashtable.version;
362 getObjectRetType = getObjRetType;
365 public object Clone()
367 return MemberwiseClone();
370 public virtual bool MoveNext()
372 if (version != hashtable.version)
379 object key = hashtable.buckets[bucket].key;
380 if (key !=
null && key != hashtable.buckets)
383 currentValue = hashtable.buckets[bucket].val;
392 public virtual void Reset()
394 if (version != hashtable.version)
399 bucket = hashtable.buckets.Length;
405 internal class HashtableDebugView
410 public KeyValuePairs[] Items
414 return hashtable.ToKeyValuePairsArray();
418 public HashtableDebugView(
Hashtable hashtable)
420 if (hashtable ==
null)
424 this.hashtable = hashtable;
428 internal const int HashPrime = 101;
430 private const int InitialSize = 3;
432 private const string LoadFactorName =
"LoadFactor";
434 private const string VersionName =
"Version";
436 private const string ComparerName =
"Comparer";
438 private const string HashCodeProviderName =
"HashCodeProvider";
440 private const string HashSizeName =
"HashSize";
442 private const string KeysName =
"Keys";
444 private const string ValuesName =
"Values";
446 private const string KeyComparerName =
"KeyComparer";
448 private bucket[] buckets;
452 private int occupancy;
454 private int loadsize;
456 private float loadFactor;
458 private volatile int version;
460 private volatile bool isWriterInProgress;
468 private object _syncRoot;
473 [Obsolete(
"Please use EqualityComparer property.")]
478 if (_keycomparer is CompatibleComparer)
480 return ((CompatibleComparer)_keycomparer).HashCodeProvider;
482 if (_keycomparer ==
null)
490 if (_keycomparer is CompatibleComparer)
492 CompatibleComparer compatibleComparer = (CompatibleComparer)_keycomparer;
493 _keycomparer =
new CompatibleComparer(compatibleComparer.Comparer, value);
496 if (_keycomparer ==
null)
498 _keycomparer =
new CompatibleComparer(
null, value);
508 [Obsolete(
"Please use KeyComparer properties.")]
513 if (_keycomparer is CompatibleComparer)
515 return ((CompatibleComparer)_keycomparer).Comparer;
517 if (_keycomparer ==
null)
525 if (_keycomparer is CompatibleComparer)
527 CompatibleComparer compatibleComparer = (CompatibleComparer)_keycomparer;
528 _keycomparer =
new CompatibleComparer(value, compatibleComparer.HashCodeProvider);
531 if (_keycomparer ==
null)
533 _keycomparer =
new CompatibleComparer(value,
null);
551 public virtual object this[
object key]
559 bucket[] array = buckets;
562 uint num = InitHash(key, array.Length, out seed, out incr);
564 int num3 = (int)(seed % (uint)array.Length);
573 bucket = array[num3];
579 while (isWriterInProgress || num5 != version);
580 if (bucket.key ==
null)
584 if ((bucket.hash_coll &
int.MaxValue) == num &&
KeyEquals(bucket.key, key))
588 num3 = (int)((num3 + incr) % (long)(uint)array.Length);
590 while (bucket.hash_coll < 0 && ++num2 < array.Length);
595 Insert(key, value, add:
false);
622 keys =
new KeyCollection(
this);
636 values =
new ValueCollection(
this);
648 if (_syncRoot ==
null)
694 if (!(loadFactor >= 0.1f) || !(loadFactor <= 1f))
698 this.loadFactor = 0.72f * loadFactor;
699 double num = (float)capacity / this.loadFactor;
700 if (num > 2147483647.0)
704 int num2 = (num > 3.0) ? HashHelpers.GetPrime((
int)num) : 3;
705 buckets =
new bucket[num2];
706 loadsize = (int)(this.loadFactor * (
float)num2);
707 isWriterInProgress =
false;
721 [Obsolete(
"Please use Hashtable(int, float, IEqualityComparer) instead.")]
723 : this(capacity, loadFactor)
731 _keycomparer =
new CompatibleComparer(
comparer,
hcp);
745 : this(capacity, loadFactor)
747 _keycomparer = equalityComparer;
755 [Obsolete(
"Please use Hashtable(IEqualityComparer) instead.")]
765 : this(0, 1f, equalityComparer)
777 [Obsolete(
"Please use Hashtable(int, IEqualityComparer) instead.")]
790 : this(capacity, 1f, equalityComparer)
812 : this(d, loadFactor, null)
824 [Obsolete(
"Please use Hashtable(IDictionary, IEqualityComparer) instead.")]
837 : this(d, 1f, equalityComparer)
853 [Obsolete(
"Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")]
879 : this(d?.
Count ?? 0, loadFactor, equalityComparer)
899 HashHelpers.SerializationInfoTable.Add(
this, info);
902 private uint InitHash(
object key,
int hashsize, out uint seed, out uint incr)
904 uint result = seed = (uint)(
GetHash(key) &
int.MaxValue);
905 incr = 1 + seed * 101 % (uint)(hashsize - 1);
916 public virtual void Add(
object key,
object value)
918 Insert(key, value, add:
true);
923 [ReliabilityContract(
Consistency.WillNotCorruptState,
Cer.Success)]
926 if (count != 0 || occupancy != 0)
929 isWriterInProgress =
true;
930 for (
int i = 0; i < buckets.Length; i++)
932 buckets[i].hash_coll = 0;
933 buckets[i].key =
null;
934 buckets[i].val =
null;
939 isWriterInProgress =
false;
948 bucket[] array = buckets;
950 hashtable.version = version;
951 hashtable.loadFactor = loadFactor;
953 int num = array.Length;
957 object key = array[num].key;
958 if (key !=
null && key != array)
960 hashtable[key] = array[num].val;
989 bucket[] array = buckets;
992 uint num = InitHash(key, array.Length, out seed, out incr);
994 int num3 = (int)(seed % (uint)array.Length);
998 bucket = array[num3];
999 if (bucket.key ==
null)
1003 if ((bucket.hash_coll &
int.MaxValue) == num &&
KeyEquals(bucket.key, key))
1007 num3 = (int)((num3 + incr) % (long)(uint)array.Length);
1009 while (bucket.hash_coll < 0 && ++num2 < array.Length);
1021 int num = buckets.Length;
1024 if (buckets[num].key !=
null && buckets[num].key != buckets && buckets[num].val ==
null)
1032 int num2 = buckets.Length;
1035 object val = buckets[num2].val;
1036 if (val !=
null && val.Equals(value))
1045 private void CopyKeys(
Array array,
int arrayIndex)
1047 bucket[] array2 = buckets;
1048 int num = array2.Length;
1051 object key = array2[num].key;
1052 if (key !=
null && key != buckets)
1054 array.SetValue(key, arrayIndex++);
1059 private void CopyEntries(Array array,
int arrayIndex)
1061 bucket[] array2 = buckets;
1062 int num = array2.Length;
1065 object key = array2[num].key;
1066 if (key !=
null && key != buckets)
1068 DictionaryEntry dictionaryEntry =
new DictionaryEntry(key, array2[num].val);
1069 array.SetValue(dictionaryEntry, arrayIndex++);
1090 if (array.Rank != 1)
1098 if (array.Length - arrayIndex <
Count)
1102 CopyEntries(array, arrayIndex);
1105 internal virtual KeyValuePairs[] ToKeyValuePairsArray()
1107 KeyValuePairs[] array =
new KeyValuePairs[count];
1109 bucket[] array2 = buckets;
1110 int num2 = array2.Length;
1113 object key = array2[num2].key;
1114 if (key !=
null && key != buckets)
1116 array[num++] =
new KeyValuePairs(key, array2[num2].val);
1122 private void CopyValues(Array array,
int arrayIndex)
1124 bucket[] array2 = buckets;
1125 int num = array2.Length;
1128 object key = array2[num].key;
1129 if (key !=
null && key != buckets)
1131 array.SetValue(array2[num].val, arrayIndex++);
1136 private void expand()
1138 int newsize = HashHelpers.ExpandPrime(buckets.Length);
1139 rehash(newsize, forceNewHashCode:
false);
1142 private void rehash()
1144 rehash(buckets.Length, forceNewHashCode:
false);
1147 private void UpdateVersion()
1152 [ReliabilityContract(
Consistency.WillNotCorruptState,
Cer.MayFail)]
1153 private void rehash(
int newsize,
bool forceNewHashCode)
1156 bucket[] newBuckets =
new bucket[newsize];
1157 for (
int i = 0; i < buckets.Length; i++)
1159 bucket bucket = buckets[i];
1160 if (bucket.key !=
null && bucket.key != buckets)
1162 int hashcode = (forceNewHashCode ?
GetHash(bucket.key) : bucket.hash_coll) & int.MaxValue;
1163 putEntry(newBuckets, bucket.key, bucket.val, hashcode);
1167 isWriterInProgress =
true;
1168 buckets = newBuckets;
1169 loadsize = (int)(loadFactor * (
float)newsize);
1171 isWriterInProgress =
false;
1179 return new HashtableEnumerator(
this, 3);
1186 return new HashtableEnumerator(
this, 3);
1196 if (_keycomparer !=
null)
1200 return key.GetHashCode();
1213 if (buckets == item)
1221 if (_keycomparer !=
null)
1223 return _keycomparer.
Equals(item, key);
1225 return item?.Equals(key) ??
false;
1228 [ReliabilityContract(
Consistency.WillNotCorruptState,
Cer.MayFail)]
1229 private void Insert(
object key,
object nvalue,
bool add)
1235 if (count >= loadsize)
1239 else if (occupancy > loadsize && count > 100)
1245 uint num = InitHash(key, buckets.Length, out seed, out incr);
1248 int num4 = (int)(seed % (uint)buckets.Length);
1251 if (num3 == -1 && buckets[num4].key == buckets && buckets[num4].hash_coll < 0)
1255 if (buckets[num4].key ==
null || (buckets[num4].key == buckets && (buckets[num4].hash_coll & 2147483648u) == 0L))
1262 isWriterInProgress =
true;
1263 buckets[num4].val = nvalue;
1264 buckets[num4].key = key;
1265 buckets[num4].hash_coll |= (int)num;
1268 isWriterInProgress =
false;
1270 if (num2 > 100 && HashHelpers.IsWellKnownEqualityComparer(_keycomparer) && (_keycomparer ==
null || !(_keycomparer is RandomizedObjectEqualityComparer)))
1272 _keycomparer = HashHelpers.GetRandomizedEqualityComparer(_keycomparer);
1273 rehash(buckets.Length, forceNewHashCode:
true);
1277 if ((buckets[num4].hash_coll &
int.MaxValue) == num &&
KeyEquals(buckets[num4].key, key))
1281 throw new ArgumentException(Environment.GetResourceString(
"Argument_AddingDuplicate__", buckets[num4].key, key));
1284 isWriterInProgress =
true;
1285 buckets[num4].val = nvalue;
1287 isWriterInProgress =
false;
1289 if (num2 > 100 && HashHelpers.IsWellKnownEqualityComparer(_keycomparer) && (_keycomparer ==
null || !(_keycomparer is RandomizedObjectEqualityComparer)))
1291 _keycomparer = HashHelpers.GetRandomizedEqualityComparer(_keycomparer);
1292 rehash(buckets.Length, forceNewHashCode:
true);
1296 if (num3 == -1 && buckets[num4].hash_coll >= 0)
1298 buckets[num4].hash_coll |=
int.MinValue;
1301 num4 = (int)((num4 + incr) % (long)(uint)buckets.Length);
1303 while (++num2 < buckets.Length);
1307 isWriterInProgress =
true;
1308 buckets[num3].val = nvalue;
1309 buckets[num3].key = key;
1310 buckets[num3].hash_coll |= (int)num;
1313 isWriterInProgress =
false;
1315 if (buckets.Length > 100 && HashHelpers.IsWellKnownEqualityComparer(_keycomparer) && (_keycomparer ==
null || !(_keycomparer is RandomizedObjectEqualityComparer)))
1317 _keycomparer = HashHelpers.GetRandomizedEqualityComparer(_keycomparer);
1318 rehash(buckets.Length, forceNewHashCode:
true);
1322 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_HashInsertFailed"));
1325 private void putEntry(bucket[] newBuckets,
object key,
object nvalue,
int hashcode)
1327 uint num = 1 + (uint)(hashcode * 101) % (uint)(newBuckets.Length - 1);
1328 int num2 = (int)((uint)hashcode % (uint)newBuckets.Length);
1329 while (newBuckets[num2].key !=
null && newBuckets[num2].key != buckets)
1331 if (newBuckets[num2].hash_coll >= 0)
1333 newBuckets[num2].hash_coll |=
int.MinValue;
1336 num2 = (int)((num2 + num) % (long)(uint)newBuckets.Length);
1338 newBuckets[num2].val = nvalue;
1339 newBuckets[num2].key = key;
1340 newBuckets[num2].hash_coll |= hashcode;
1348 [ReliabilityContract(
Consistency.WillNotCorruptState,
Cer.MayFail)]
1357 uint num = InitHash(key, buckets.Length, out seed, out incr);
1359 int num3 = (int)(seed % (uint)buckets.Length);
1362 bucket bucket = buckets[num3];
1363 if ((bucket.hash_coll &
int.MaxValue) == num &&
KeyEquals(bucket.key, key))
1367 num3 = (int)((num3 + incr) % (long)(uint)buckets.Length);
1368 if (bucket.hash_coll >= 0 || ++num2 >= buckets.Length)
1374 isWriterInProgress =
true;
1375 buckets[num3].hash_coll &=
int.MinValue;
1376 if (buckets[num3].hash_coll != 0)
1378 buckets[num3].key = buckets;
1382 buckets[num3].key =
null;
1384 buckets[num3].val =
null;
1387 isWriterInProgress =
false;
1396 [HostProtection(
SecurityAction.LinkDemand, Synchronization =
true)]
1403 return new SyncHashtable(table);
1422 info.AddValue(
"LoadFactor", loadFactor);
1423 info.AddValue(
"Version", version);
1425 if (equalityComparer ==
null)
1427 info.AddValue(
"Comparer",
null, typeof(
IComparer));
1430 else if (equalityComparer is CompatibleComparer)
1432 CompatibleComparer compatibleComparer = equalityComparer as CompatibleComparer;
1433 info.AddValue(
"Comparer", compatibleComparer.Comparer, typeof(
IComparer));
1434 info.AddValue(
"HashCodeProvider", compatibleComparer.HashCodeProvider, typeof(
IHashCodeProvider));
1440 info.AddValue(
"HashSize", buckets.Length);
1441 object[] array =
new object[count];
1442 object[] array2 =
new object[count];
1444 CopyValues(array2, 0);
1445 info.AddValue(
"Keys", array, typeof(
object[]));
1446 info.AddValue(
"Values", array2, typeof(
object[]));
1459 if (buckets !=
null)
1463 HashHelpers.SerializationInfoTable.TryGetValue(
this, out
SerializationInfo value);
1471 object[] array =
null;
1472 object[] array2 =
null;
1476 switch (enumerator.
Name)
1479 loadFactor = value.GetSingle(
"LoadFactor");
1482 num = value.GetInt32(
"HashSize");
1490 case "HashCodeProvider":
1494 array = (
object[])value.GetValue(
"Keys", typeof(
object[]));
1497 array2 = (
object[])value.GetValue(
"Values", typeof(
object[]));
1501 loadsize = (int)(loadFactor * (
float)num);
1502 if (_keycomparer ==
null && (
comparer !=
null || hashCodeProvider !=
null))
1504 _keycomparer =
new CompatibleComparer(
comparer, hashCodeProvider);
1506 buckets =
new bucket[num];
1515 if (array.Length != array2.Length)
1519 for (
int i = 0; i < array.Length; i++)
1521 if (array[i] ==
null)
1525 Insert(array[i], array2[i], add:
true);
1527 version = value.GetInt32(
"Version");
1528 HashHelpers.SerializationInfoTable.Remove(
this);
Supplies a hash code for an object, using a custom hash function.
virtual bool IsSynchronized
Gets a value indicating whether access to the T:System.Collections.Hashtable is synchronized (thread ...
The exception that is thrown when a null reference (Nothing in Visual Basic) is passed to a method th...
Provides a base class for implementations of the T:System.Collections.Generic.IEqualityComparer`1 gen...
virtual void Add(object key, object value)
Adds an element with the specified key and value into the T:System.Collections.Hashtable.
bool MoveNext()
Advances the enumerator to the next element of the collection.
Hashtable(int capacity)
Initializes a new, empty instance of the T:System.Collections.Hashtable class using the specified ini...
virtual IDictionaryEnumerator GetEnumerator()
Returns an T:System.Collections.IDictionaryEnumerator that iterates through the T:System....
Hashtable(SerializationInfo info, StreamingContext context)
Initializes a new, empty instance of the T:System.Collections.Hashtable class that is serializable us...
Hashtable(IDictionary d, IEqualityComparer equalityComparer)
Initializes a new instance of the T:System.Collections.Hashtable class by copying the elements from t...
object Key
Gets the key of the current dictionary entry.
Indicates that a class is to be notified when deserialization of the entire object graph has been com...
Hashtable(int capacity, float loadFactor)
Initializes a new, empty instance of the T:System.Collections.Hashtable class using the specified ini...
new IEnumerator< T > GetEnumerator()
Returns an enumerator that iterates through the collection.
The exception that is thrown when the value of an argument is outside the allowable range of values a...
virtual void GetObjectData(SerializationInfo info, StreamingContext context)
Implements the T:System.Runtime.Serialization.ISerializable interface and returns the data needed to ...
virtual object Clone()
Creates a shallow copy of the T:System.Collections.Hashtable.
Hashtable(int capacity, float loadFactor, IHashCodeProvider hcp, IComparer comparer)
Initializes a new, empty instance of the T:System.Collections.Hashtable class using the specified ini...
Exposes the enumerator, which supports a simple iteration over a collection of a specified type....
virtual bool ContainsKey(object key)
Determines whether the T:System.Collections.Hashtable contains a specific key.
Describes the source and destination of a given serialized stream, and provides an additional caller-...
virtual bool IsFixedSize
Gets a value indicating whether the T:System.Collections.Hashtable has a fixed size.
virtual bool KeyEquals(object item, object key)
Compares a specific T:System.Object with a specific key in the T:System.Collections....
Supports a simple iteration over a generic collection.
IComparer comparer
Gets or sets the T:System.Collections.IComparer to use for the T:System.Collections....
Cer
Specifies a method's behavior when called within a constrained execution region.
virtual ICollection Values
Gets an T:System.Collections.ICollection containing the values in the T:System.Collections....
virtual int GetHash(object key)
Returns the hash code for the specified key.
virtual void OnDeserialization(object sender)
Implements the T:System.Runtime.Serialization.ISerializable interface and raises the deserialization ...
SecurityAction
Specifies the security actions that can be performed using declarative security.
Exposes an enumerator, which supports a simple iteration over a non-generic collection....
Hashtable(IEqualityComparer equalityComparer)
Initializes a new, empty instance of the T:System.Collections.Hashtable class using the default initi...
Provides information about, and means to manipulate, the current environment and platform....
new bool Equals(object x, object y)
Determines whether the specified objects are equal.
virtual void CopyTo(Array array, int arrayIndex)
Copies the T:System.Collections.Hashtable elements to a one-dimensional T:System.Array instance at th...
Hashtable(IDictionary d)
Initializes a new instance of the T:System.Collections.Hashtable class by copying the elements from t...
Hashtable(IDictionary d, float loadFactor)
Initializes a new instance of the T:System.Collections.Hashtable class by copying the elements from t...
static int CompareExchange(ref int location1, int value, int comparand)
Compares two 32-bit signed integers for equality and, if they are equal, replaces the first value.
Represents a collection of key/value pairs that are organized based on the hash code of the key....
virtual ICollection Keys
Gets an T:System.Collections.ICollection containing the keys in the T:System.Collections....
Defines methods to support the comparison of objects for equality.
static void BeginCriticalRegion()
Notifies a host that execution is about to enter a region of code in which the effects of a thread ab...
Supports cloning, which creates a new instance of a class with the same value as an existing instance...
Exposes a method that compares two objects.
IHashCodeProvider hcp
Gets or sets the object that can dispense hash codes.
Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the ba...
static Hashtable Synchronized(Hashtable table)
Returns a synchronized (thread-safe) wrapper for the T:System.Collections.Hashtable.
The exception thrown when an error occurs during serialization or deserialization.
static void EndCriticalRegion()
Notifies a host that execution is about to enter a region of code in which the effects of a thread ab...
Hashtable(IDictionary d, IHashCodeProvider hcp, IComparer comparer)
Initializes a new instance of the T:System.Collections.Hashtable class by copying the elements from t...
IEnumerator GetEnumerator()
Returns an enumerator that iterates through a collection.
Hashtable(IHashCodeProvider hcp, IComparer comparer)
Initializes a new, empty instance of the T:System.Collections.Hashtable class using the default initi...
virtual bool ContainsValue(object value)
Determines whether the T:System.Collections.Hashtable contains a specific value.
Stores all the data needed to serialize or deserialize an object. This class cannot be inherited.
virtual object SyncRoot
Gets an object that can be used to synchronize access to the T:System.Collections....
Hashtable(int capacity, IEqualityComparer equalityComparer)
Initializes a new, empty instance of the T:System.Collections.Hashtable class using the specified ini...
int GetHashCode(object obj)
Returns a hash code for the specified object.
The exception that is thrown when one of the arguments provided to a method is not valid.
Allows an object to control its own serialization and deserialization.
virtual bool Contains(object key)
Determines whether the T:System.Collections.Hashtable contains a specific key.
virtual void Remove(object key)
Removes the element with the specified key from the T:System.Collections.Hashtable.
new IDictionaryEnumerator GetEnumerator()
Returns an T:System.Collections.IDictionaryEnumerator object for the T:System.Collections....
object Value
Gets the value of the current dictionary entry.
virtual bool IsReadOnly
Gets a value indicating whether the T:System.Collections.Hashtable is read-only.
Hashtable(int capacity, IHashCodeProvider hcp, IComparer comparer)
Initializes a new, empty instance of the T:System.Collections.Hashtable class using the specified ini...
Specifies that the class can be serialized.
Hashtable(int capacity, float loadFactor, IEqualityComparer equalityComparer)
Initializes a new, empty instance of the T:System.Collections.Hashtable class using the specified ini...
Enumerates the elements of a nongeneric dictionary.
string Name
Gets the name for the item currently being examined.
The exception that is thrown when a method call is invalid for the object's current state.
Hashtable()
Initializes a new, empty instance of the T:System.Collections.Hashtable class using the default initi...
Consistency
Specifies a reliability contract.
virtual void Clear()
Removes all elements from the T:System.Collections.Hashtable.
Defines size, enumerators, and synchronization methods for all nongeneric collections.
static void Sleep(int millisecondsTimeout)
Suspends the current thread for the specified number of milliseconds.
Defines a dictionary key/value pair that can be set or retrieved.
Provides a formatter-friendly mechanism for parsing the data in T:System.Runtime.Serialization....
DebuggerBrowsableState
Provides display instructions for the debugger.
Represents a nongeneric collection of key/value pairs.
Provides atomic operations for variables that are shared by multiple threads.
Supports a simple iteration over a non-generic collection.
virtual int Count
Gets the number of key/value pairs contained in the T:System.Collections.Hashtable.
bool MoveNext()
Updates the enumerator to the next item.
Creates and controls a thread, sets its priority, and gets its status.