Dictionary.Add
throws an exception if the key is already present. []
when used for setting an item doesn't (it does if you try to access it for read).
x.Add(key, value); // will throw if key already exists or key is null
x[key] = value; // will throw only if key is null
var y = x[key]; // will throw if key doesn't exists or key is null