Проблема с Dictionary<string,Animal>
в том, что она позволяет добавлять.Если бы вы могли добавить «животное» в словарь собак, вы могли бы легко оказаться там с кошкой, тогда весь ад вырвался бы на свободу.Таким образом, компилятор не позволит вам рассматривать любой другой тип словаря как тот же.
Что вам нужно сделать, это использовать интерфейс только для чтения, такой как IEnumerable
.
public void Check( IEnumerable<KeyValuePair<string,Animal>> animals )
{
foreach(var pair in animals)
{
var animal = pair.Value;
//Do something
}
}
Другой вариант - сделать ваш метод универсальным:
public void Check<T>( Dictionary<string,T>> animals ) where T : animal
{
foreach(T animal in animals)
{
//Do something
}
}
Если вы хотите понять теорию, лежащую в основе этого, посмотрите один из ответов о ковариации и контравариантности, например этот или этот .