当我尝试以下操作时,我看到System.InvalidCastException
:
IReadOnlyDictionary<string, IReadOnlyCollection<MyType>> results = new ConcurrentDictionary<string, ConcurrentBag<MyType>>();
我不明白此错误消息的根本原因:
ConcurrentBag 实现了 IReadOnlyCollection,ConcurrentDictionary 实现了 IReadOnlyDictionary。
为什么铸造失败?
取而代之的是:
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>>();
这称为协方差限制。以下是更多关于它的信息: 基本上,如果你有一个父级的容器,你可以把任何派生类放进去。但是如果你有一个孩子的容器,那么你就不能把父母放在里面。
在瀑布中,水从上到下落下。
https://learn.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/dd799517(v=vs.100(