Reflector tells me that SortedList uses a ThrowHelper class to throw exceptions instead of throwing them directly, for example:
public TValue this[TKey key] { get { int index = this.IndexOfKey(key); if (index >= 0) return this.values[index]; ThrowHelper.ThrowKeyNotFoundException(); return default(TValue); }
where ThrowKeyNotFoundException does nothing more than just:
throw new KeyNotFoundException();
Note how this requires a duff statement ‘return default(TValue)’ which is unreachable. I must conclude that this is a pattern with benefits large enough to justify this.
What are these benefits?
According to ThrowHelper.cs source code the main purpose is to reduce the JITted code size. Below is a direct copy paste from the link: