To those saying that it's OK to run a linear search if you "control n", be very careful. Your linear search over 20 items might end up being executed 10,000 times in a loop (I've seen this), and some batch is now taking a full minute when it should be more like 5 seconds. The difference doesn't have to be as dramatic as 1 second vs. 1 month for users to care.
It's really not that much harder to use a dictionary in C#. I don't understand the complaints about adding all this complexity. In actual fact, the code for a dictionary is often cleaner, especially if there's one specific field you usually use as an identifier.
Getting an item from a dictionary:
MyObject FindDictionaryItem(int objectID)
return dic[objectID]; // We're done!
Getting an item from a list:
MyObject FindListItem(int objectID)
foreach (MyObject m in list)
if (m.ID == objectID)
throw new KeyNotFoundException();
I think most people would say that the dictionary version is actually much LESS complex.