Здесь есть несколько проблем, связанных с дисперсией.
Это не сработает, потому что List<T>
или любой другой класс в. NET не поддерживает дисперсию.
Другими словами T
должен быть специфицированным c типом и не учитывает наследование / заменяемость, как с не универсальными c типами.
Аналогично для Dictionary<TKey, TValue>
, TValue
не является вариантом, поэтому вы не можете просто использовать object
в качестве значения.
IEnumerable<out T>
с другой стороны является ковариантным, поэтому вы можете сделать это:
public IEnumerable<IDictionary> getDifferentItems()
{
yield return getEmployees();
yield return getCustomers();
}
IDictionary
используется, поскольку это единственный общий предок (кроме объекта) для Dictionary<string, Employee>
и Dictionary<string, Customer>
.
Это может удовлетворить ваши требования, но вы не ясно вы пытаетесь достичь с помощью getDifferentItems
метода.
Более подробную информацию о дисперсии можно найти здесь .