尝试以下操作时,我看到System.InvalidCastException
:
IReadOnlyDictionary<string, IReadOnlyCollection<MyType>> results = new ConcurrentDictionary<string, ConcurrentBag<MyType>>();
我不明白此错误消息的根本原因:
ConcurrentBag实现IReadOnlyCollection,而ConcurrentDictionary实现IReadOnlyDictionary。
为什么投射失败?
答案 0 :(得分:0)
代替此:
IReadOnlyDictionary<string, IReadOnlyCollection<MyType>> results = new ConcurrentDictionary<string, ConcurrentBag<MyType>>();
您需要执行以下操作:
ConcurrentDictionary<string, IReadOnlyCollection<MyType>> results = new ConcurrentDictionary<string, IReadOnlyCollection<MyType>>();
或
ConcurrentDictionary<string, ConcurrentBag<Point>> results = new ConcurrentDictionary<string, ConcurrentBag<Point>>();
这称为协方差限制。这里有更多关于它的信息: 基本上,如果您有一个parent容器,则可以在其中放入任何派生类。但是,如果您有一个用于存放孩子的容器,则不能将父母放在其中。
在瀑布中,水从上到下滴下。
https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/dd799517(v=vs.100)