开发者

Something like IDictionary<TKey, TValue>, but only for keys (value is not needed) in .NET?

Is there something in .Net that allows storing/retrieving/contains keys without values?

I can use Dictionary<string, string> and always store String.Empty as value, but maybe there is some 开发者_如何学Cbetter solution?


You can use the HashSet<T> class, it's meant to store distinct values in a set.

The main difference between that and an IDictionary{TKey, TValue} (aside from the fact that it doesn't store values) is that you can add the same value to the HashSet<T> and if it already exists it does not throw an exception (when you try and call the Add method on it, as opposed to the Add method on IDictionary{TKey, TValue}, which will throw an ArgumentException if the item exists in the dictionary already.


Try Hashset<T> if you're using .NET 3.5 or above.


You're probably looking for System.Collections.Generic.HashSet<T>

Here's the relevant excerpt from MSDN:

The HashSet<T> class provides high-performance set operations. A set is a collection that contains no duplicate elements, and whose elements are in no particular order.

The capacity of a HashSet<T> object is the number of elements that the object can hold. A HashSet<T> object's capacity automatically increases as elements are added to the object.

Starting with the .NET Framework version 4, the HashSet<T> class implements the ISet<T> interface.


If you are using .NET 3.5 you can go with the HashSet class. If not then you have to create your own generic class (maybe inherit from List<> and do the checks).


List<T> has a Contains method to test if a certain element exists in the list but HashSet as other suggests would work and is probably faster as it cannot contain duplicates. List<T> can have duplicate values.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜