Wann sollte man welche Variante verwenden? Welche Variante bietet gegenüber der anderen welchen Vorteil! Oder gibt es noch eine ganz andere (vielleicht sogar bessere) Lösung? Vielen Dank!
Während Dictionary<TKey, TValue> die eine Möglichkeit ist, wäre KeyedCollection<TKey, TValue> die andere. Letztere ist zwar abstract und Du musst GetKeyForItem implementieren, dafür ist sie aber auch Serializable und sollte schneller sein als Dictionary<TKey, TValue>.
Ausserdem sollte Dictionary<TKey, TValue> lt. Framework Design Guide nicht in public APIs verwendet werden, da es sich um Datenstrukturen handelt, die für die interne Implementierung innerhalb einer Klasse vorgesehen ist. IDictionary<TKey, TValue> sollte dann verwendet werden.
In dem Zusammenhang möchte ich noch erwähnen dass man in multithread Szenarien auch an das In dem Zusammenhang möchte ich noch erwähnen dass man in multithread Szenarien auch an das ConcurrentDictionary<TKey,TValue> denken sollte.
Naja, die NameValueCollection enthält nur Strings (Ist ne Altlast, wurde ja schon erwähnt) wohingegen Dictionary<TKey, TValue> je nach definition andere Typen aufnehmen kann. Ich würde generell nur noch das Dictionary<TKey, TValue>, auch für reine String-Dictionaries un nur um nicht jedesmal wieder umdenken zu müssen.