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]