ドキュメントに従って:
public class Queue<T> : IEnumerable<T>, ICollection, IEnumerable
したがって、ジェネリック IEnumerable<T>インターフェイスを実装しますが、非 ICollectionジェネリック インターフェイスを実装します。
ICollection名前の類似性に惑わされてはいけません。ICollection<T>完全に別のインターフェイスです。このようなもの (一部のジェネリック インターフェイスを実装し、非ジェネリックな他のインターフェイスのみを実装する) は珍しいものですが、完全に正当です。
ICollection<T>設計者が実際には .NET でサポートしたくないさまざまな側面があったと思いますが、同様に、人々が非ジェネリッククラスから簡単にアップグレードできるようQueue<T>に実装したいと考えていました。ICollectionQueue
編集:デニスの回答に記載されているように、ICollection.CopyToで明示的に実装されていQueue<T>ます。これは、 type の式を介してのみその署名に到達できるICollectionことを意味します。例えば:
Queue<string> queue = new Queue<string>();
Array array = new Button[10];
queue.CopyTo(array, 0, queue.Count); // Compilation failure...
ICollection collection = (ICollection) queue;
collection.CopyTo(array, 0, queue.Count); // Compiles, but will go bang
厳密に型指定された配列を取るメソッドはを実装するのに有効ですICollection<T>.CopyToが、 のメソッドAddとRemoveメソッドはICollection<T>存在しません。EnqueueDequeue