if (key == null)
throw new ArgumentNullException ("key");
- int indx = 0;
- try {
- indx = Find (key);
- } catch (Exception) {
- throw new InvalidOperationException();
- }
+ int indx = Find (key);
return (indx | (indx >> 31));
}
KeyValuePair<TKey, TValue> [] table = this.table;
- int freeIndx = -1;
-
- try {
- freeIndx = Find (key);
- } catch (Exception) {
- throw new InvalidOperationException();
- }
+ int freeIndx = Find (key);
if (freeIndx >= 0) {
if (!overwrite)
}
}
+ private int Compare (TKey a, TKey b)
+ {
+ try {
+ return comparer.Compare (a, b);
+ } catch (Exception ex) {
+ throw new InvalidOperationException ("Failed to compare two elements.", ex);
+ }
+ }
+
private int Find (TKey key)
{
KeyValuePair<TKey, TValue> [] table = this.table;
while (left <= right) {
int guess = (left + right) >> 1;
- int cmp = comparer.Compare (table[guess].Key, key);
+ int cmp = Compare (table[guess].Key, key);
if (cmp == 0) return guess;
if (cmp < 0) left = guess+1;