A Nullable<T>
является struct
/ значением-типом и может быть null
(в зависимости от вашего определения null
; но, безусловно, оно может box до null
). И не все TKey
имеют тип значения (string
является, пожалуй, наиболее распространенным TKey
).
Здесь требуется, чтобы ключ не был нулевым; так что нужно проверить это.
На самом деле бокс не так плох, как думают люди; даже в штучной упаковке, он будет собран gen-0. Это может особый случай через дженерики (как EqualityComparer<T>
делает - через несколько различных подклассов), но это кажется излишним.
JIT может также сможет удалить нулевую проверку. Я говорю может здесь, хотя это часто цитируется, я видел случаи, когда нулевая проверка была за пределами способности JIT удалить.