Dictionary<Foo, Bar> foobar = new Dictionary<Foo, Bar>();
var foo = new Foo();
var bar = new Bar();
var bar2 = new Bar();
foobar[foo] = bar; // invalid - foo isn't in the collection yet.
foobar.Add(foo, bar); // correct way to add an element to the collection.
foobar[foo] = bar2; // valid way of changing the element whose key is foo, but only once the element has been added in the first place.
foobar.Remove(foo); // remove the item.
Assert(foobar.Count == 0);