Ответ 1
Поскольку общие словари могут содержать экземпляры типа значения, а null недействителен для типа значения. Например:
var dict = new Dictionary<string, DateTime>();
DateTime date = dict["foo"]; // What should happen here? date cannot be null!
Вместо этого вы должны использовать метод словаря TryGetValue:
var dict = new Dictionary<string, DateTime>();
DateTime date;
if (dict.TryGetValue("foo", out date)) {
// Key was present; date is set to the value in the dictionary.
} else {
// Key was not present; date is set to its default value.
}
Кроме того, словарь, в котором хранятся ссылочные типы, по-прежнему будет хранить нулевые значения. И ваш код может считать "значение равно null" отличным от "ключа не существует".