C# 将字典强制转换为iRadonlyDictionary?

C# 将字典强制转换为iRadonlyDictionary?,c#,dictionary,interface,casting,C#,Dictionary,Interface,Casting,我们可以轻松做到这一点: List<Value> list; IReadOnlyList<IValue> List => list; 但是我们怎样才能对IReadOnlyDictionary做同样的事情呢 Dictionary<Key, Value> dict; IReadOnlyDictionary<Key, IValue> Dict => dic; //impossible 这是因为IReadOnlyList是协变的: 公共接口

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

List<Value> list;
IReadOnlyList<IValue> List => list;
但是我们怎样才能对IReadOnlyDictionary做同样的事情呢

Dictionary<Key, Value> dict;
IReadOnlyDictionary<Key, IValue> Dict => dic; //impossible
这是因为IReadOnlyList是协变的:

公共接口IReadOnlyList{…} 而IReadOnlyDictionary不是:

公共接口IReadOnlyDictionary{…} 这是因为IReadOnlyList是协变的:

公共接口IReadOnlyList{…} 而IReadOnlyDictionary不是:

公共接口IReadOnlyDictionary{…}
但是,您不能以分配和重新灰化为代价,您可以对其进行投影:

IReadOnlyDictionary<string, IValue> Dict 
   => dict.ToDictionary(x => x.Key, x => (IValue)x.Value);

尽管您可能需要重新思考您的问题。

您不能,但是,您可以以分配和重新灰化为代价来预测它:

IReadOnlyDictionary<string, IValue> Dict 
   => dict.ToDictionary(x => x.Key, x => (IValue)x.Value);

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

是的,我认为最好的选择是添加一个函数,如:IValue GetKey=>dict[key]是的,我认为最好的选择是添加一个函数,如:IValue GetKey=>dict[key]