public object this[object key]
{
get
{
if (key == null)
{
throw new ArgumentNullException("key", "error");
}
var node = head;
if (comparer == null)
{
while (node != null)
{
var oldKey = node.key;
if (oldKey != null && oldKey.Equals(key))
{
return node.value;
}
node = node.next;
}
}
else
{
while (node != null)
{
var oldKey = node.key;
if (oldKey != null && comparer.Compare(oldKey, key) == 0)
{
return node.value;
}
node = node.next;
}
}
return null;
}
set
{
if (key == null)
{
throw new ArgumentNullException("key", "error");
}
version++;
DictionaryNode last = null;
DictionaryNode node;
for (node = head; node != null; node = node.next)
{
var oldKey = node.key;
if ((comparer == null) ? oldKey.Equals(key) : comparer.Compare(oldKey, key) == 0)
{
break;
}
last = node;
}
if (node != null)
{
// Found it
node.value = value;
return;
}
// Not found, so add a new one
var newNode = new DictionaryNode();
newNode.key = key;
newNode.value = value;
if (last != null)
{
last.next = newNode;
}
else
{
head = newNode;
}
Count++;
}
}