我们可以轻松做到这一点:
List<Value> list;
IReadOnlyList<IValue> List => list;
但是我们如何使用IReadOnlyDictionary做同样的事情?
Dictionary<Key, Value> dict;
IReadOnlyDictionary<Key, IValue> Dict => dic; //impossible
答案 0 :(得分:2)
这是因为IReadOnlyList
是协变的:
public interface IReadOnlyList<out T> {...}
IReadOnlyDictionary
不是:
public interface IReadOnlyDictionary<TKey,TValue> {...}
答案 1 :(得分:2)
您不能,但是可以以分配和重新哈希为代价,可以对其进行投影
IReadOnlyDictionary<string, IValue> Dict
=> dict.ToDictionary(x => x.Key, x => (IValue)x.Value);
尽管您可能需要重新考虑问题