dumb question ... if you happen to call this "add or set" with the same key value but different objects, or keeps a list in sync with database, what happens to the existing element that might be already stored. For example:
initially...
list.AddOrSet(serial-number, object-associated-with-serial-number);
on loading from dataset (say 10 minutes later)...
list.AddOrSet(serial-number, object-associated-with-serial-number-updated);
what happens with the object associated with serial-number initially?