Мы можем легко сделать это:
List<Value> list; IReadOnlyList<IValue> List => list;
Но как мы можем сделать то же самое с IReadOnlyDictionary?
Dictionary<Key, Value> dict; IReadOnlyDictionary<Key, IValue> Dict => dic; //impossible
Вы не можете, однако за счет выделений и перефразирования вы можете проецировать его
IReadOnlyDictionary<string, IValue> Dict => dict.ToDictionary(x => x.Key, x => (IValue)x.Value);
Хотя вам, возможно, придется переосмыслить вашу проблему
Это потому, что IReadOnlyList является ковариантным:
IReadOnlyList
public interface IReadOnlyList<out T> {...}
, тогда как IReadOnlyDictionary не является:
IReadOnlyDictionary
public interface IReadOnlyDictionary<TKey,TValue> {...}