在将不同的实现了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>();
一切都很好,没有编译或运行时错误。
List
是一个通用类;但例如LinkedList
是List
类的子类。这可能涉及到继承问题,但我也想了解答案。 - stuck