IReadOnlyCollection
为什么编译器在尝试将不同的集合(都实现了接口)转换为 时会以不同的方式处理它们IReadOnlyCollection
?
IReadOnlyCollection<int> a = new List<int>(); // everything fine
IReadOnlyCollection<int> b = new HashSet<int>(); // compiler wants me to cast
IReadOnlyCollection<int> c = new Stack<int>(); // compiler wants me to cast
IReadOnlyCollection<int> d = new Queue<int>(); // compiler wants me to cast
IReadOnlyCollection<int> e = new LinkedList<int>(); // compiler wants me to cast
IReadOnlyCollection<int> f = new SortedSet<int>(); // compiler wants me to cast
我正在使用 .NET 4.5 和 VisualStudio 2015。
上述情况下的编译器错误是这样的:
类型Queue<int>
// Stack<int>
... 不能隐式转换为IReadOnlyCollection<int>
. 存在显式转换。你缺演员吗?
(这不是实际的文本,但我相信你不会希望我在这里复制粘贴德语文本。)
如果我做演员
IReadOnlyCollection<int> d = new Queue<int>() as IReadOnlyCollection<int>;
甚至通过
IReadOnlyCollection<int> d = (IReadOnlyCollection<int>)new Queue<int>();
一切都很好; 它没有给我编译或运行时错误。