Все зависит от используемой реализации бетона .
Например, Dictionary реализует как универсальный IDictionary , так и неуниверсальный IDictionary - поэтому, если у вас есть Dictionary , вы можете использовать его как любой без проблем:
Dictionary<int, string> lookup = new Dictionary<int,string>();
IDictionary<int,string> typed = lookup;
IDictionary untyped = lookup;
Однако это не обязательно относится ко всем имплементациям IDictionary , поскольку неверно, что IDictionary : IDictionary. Если вы глубоко в недрах какого-то общего кода, вы можете проверить текущий словарь:
IDictionary<int,string> typed = ...
IDictionary untyped = typed as IDictionary;
if(untyped == null) {/* create by enumeration */}