If we're worried about performance I think a TryGetValue will be more efficient than a ContainsKey followed by a lookup...but maybe we're at the point now where it won't make that much difference?