是什么导致此System.InvalidCastException?

时间:2018-10-17 01:54:20

标签: c# casting covariance

尝试以下操作时,我看到System.InvalidCastException

IReadOnlyDictionary<string, IReadOnlyCollection<MyType>> results = new ConcurrentDictionary<string, ConcurrentBag<MyType>>();

我不明白此错误消息的根本原因:

  

ConcurrentBag实现IReadOnlyCollection,而ConcurrentDictionary实现IReadOnlyDictionary。

为什么投射失败?

1 个答案:

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