Ответ 1
Я считаю, что из-за covariance.
Короче:
aDictionary
будет Dictionary<SomeEnum, SomeClass>
, но в текущем контексте он известен как Dictionary<Enum, SomeClass>
.
Если ваше объявление было разрешено, компилятор должен после этого сделать:
aDictionary.Add(someValueFromAnotherEnumUnrelatedToSomeEnum, aValue);
что явно несовместимо с фактическим типом словаря.
То почему co-дисперсия не разрешена по умолчанию, и вы должны явно включить ее в тех случаях, когда это имеет смысл.
Вывод состоит в том, что вы должны точно указать тип:
Dictionary<SomeEnum, SomeClass> aDictionary =
new Dictionary<SomeEnum, SomeClass>();