是否将Dictionary <Key,Value>转换为IReadOnlyDictionary <Key,IValue>?

时间:2019-07-10 06:07:39

标签: c# dictionary interface casting

我们可以轻松做到这一点:

List<Value> list;
IReadOnlyList<IValue> List => list;

但是我们如何使用IReadOnlyDictionary做同样的事情?

Dictionary<Key, Value> dict;
IReadOnlyDictionary<Key, IValue> Dict => dic; //impossible

2 个答案:

答案 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);

尽管您可能需要重新考虑问题