{
}
- public Hashtable (IDictionary d, float loadFactor, IEqualityComparer equalityComparer) : this (d, loadFactor)
+ public Hashtable (IDictionary d, float loadFactor, IEqualityComparer equalityComparer) : this (d == null ? 0 : d.Count, loadFactor, equalityComparer)
{
- this.equalityComparer = equalityComparer;
+ if (d == null)
+ throw new ArgumentNullException ("d");
+
+ IDictionaryEnumerator it = d.GetEnumerator ();
+ while (it.MoveNext ()) {
+ Add (it.Key, it.Value);
+ }
}
public Hashtable (IEqualityComparer equalityComparer) : this (1, 1.0f, equalityComparer)
dd.Remove (v);\r
}\r
}\r
+\r
+ [Test]\r
+ public void HashtableCopyWithCustomComparer ()\r
+ {\r
+ var ht = new Hashtable ();\r
+ ht.Add ("a", "b");\r
+ try {\r
+ new Hashtable (ht, new IEqualityComparer_ApplicationException ());\r
+ Assert.Fail ("custom comparer not used");\r
+ } catch (ApplicationException) {\r
+\r
+ }\r
+ }\r
}\r
\r
class IDHashtable : Hashtable {\r
}\r
};\r
\r
+ class IEqualityComparer_ApplicationException : IEqualityComparer\r
+ {\r
+ public new bool Equals (object x, object y)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ public int GetHashCode (object obj)\r
+ {\r
+ throw new ApplicationException ();\r
+ }\r
+ }\r
\r
}\r