それはすべて、使用している具体的な実装に依存します。
たとえば、Dictionary<TKey,TValue> は、ジェネリック IDictionary<TKey,TValue> と非ジェネリック IDictionary の両方を実装しているため、Dictionary<TKey,TValue> がある場合は、どちらでも問題なく使用できます。
Dictionary<int, string> lookup = new Dictionary<int,string>();
IDictionary<int,string> typed = lookup;
IDictionary untyped = lookup;
ただし、IDictionary<TKey,TValue> が IDictionary であるとは限らないため、これは必ずしもすべての IDictionary<TKey,TValue> 実装に適用されるわけではありません。一般的なコードの奥深くにいる場合は、現在の辞書をテストできます。
IDictionary<int,string> typed = ...
IDictionary untyped = typed as IDictionary;
if(untyped == null) {/* create by enumeration */}