Four Versions and Eight Years in the Making: ISet
Another addition to .NET 4.0 that I'd previously missed is an interface that most of us had long ago given up on ever seeing in as part of a Microsoft product: the
ISet<T> interface. The set documentation is on MSDN, and if you've previously used the
HashSet class, it should look pretty familiar.
I say that
ISet is four versions and eight years in the making, because practically speaking, a framework like .NET should've probably included set interfaces and implementations from the get-go. This article's original title was four versions and eight years late, which in all fairness, might be a more accurate description of the situation. Java, a language that C# borrowed from heavily (to say the least), has had its own
Set interface since version 1.2, released in December 1998, years before C#'s first release in 2001.
Even giving Microsoft the benefit of the doubt by assuming that they had their reasons for not putting in a proper set until version 3.0, it's still pretty hard to see why they didn't see fit to put in
ISet at the same time as
HashSet. Another 4.0 addition, the
SortedSet, is likely what finally forced Microsoft's hand. Having two separate set classes with no common interface probably felt a little wrong, even to them.
On a positive note, .NET 4.0 is really shaping up to be an outstanding release. With the addition of
ISet, tuples, optional/named parameters and co-variance, it seems like Microsoft is really focussing on fixing some of their previous omissions.
Addendeum — Did anyone else encapsulate
Dictionary to roll their own set implementation? I ended up using mine all the way up until
HashSet walked onto the scene in 3.0.