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.

Posted on June 23, 2009 from Calgary

About

My name is Brandur. I'm a polyglot software engineer and part-time designer working at Heroku in San Francisco, California. I'm a Canadian expat. My name is Icelandic. Drop me a line at brandur@mutelight.org.

Aside from technology, I'm interested in energy and how it relates to our society, travel, longboarding, muay thai, symphonic metal, and the guitar.

If you liked this article, consider finding me on Twitter.