The difference between NotSupportedException and NotImplementedException

Sounds like one of those Wait Wait Don’t Tell me questions… 10 points if you can tell me the difference between NotSupportedException and NotImplementedException... ;-)

NotSupportedException is for cases where it is ok (that is, by design) to not implement some interface functionality (for example IList.Add(), because IList offers a way to check to see if Add() will throw.

NotImplementedException is for functionality that is just not yet implemented, but really should (and will be). Something like what you might *start* with when you are building a class, get all the methods there throwing NotImplementedException, then flush them out with real code…

Clear as mud?

Now comes the part where you tell me the places in the framework we are not following these guidelines and I have to go off an beat up a bunch of different teams. ;-)