-->

堆 实现ICollection的,但自ICollection方法 (Stack impl

2019-09-17 05:50发布

我试图创建一个基于自定义集合Stack<T> 当我看Stack<T> [从元数据]在Visual Studio中,它表明, Stack<T>实现ICollection ,这将需要它来实现ICollectionCopyTo(Array array, index)的方法,但相反,它被示出作为具有ICollection<T>CopyTo(T[] array, index)方法。 有人可以解释为什么是这样的情况?

我试图创建一个集合模仿Stack<T>相当严重。 当我实施ICollection作为堆栈那样,它需要我使用CopyTo(Array array, index)的方法,但我真正想是使用CopyTo(T[] array, index)方法,如Stack<T>一样。 有没有办法实现这一点没有实现ICollection<T>

Answer 1:

正如其他人写的,你可以使用显式接口实现,以满足您的非通用接口:

void ICollection.CopyTo(Array array, int arrayIndex)
{
  var arrayOfT = array as T[];
  if (arrayOfT == null)
    throw new InvalidOperationException();
  CopyTo(arrayOfT, arrayIndex); // calls your good generic method
}


Answer 2:

我想方法CopyTo(Array array, index)明确地实现。 这意味着,你将只能看到该方法,如果你看到的对象作为一个ICollection的:

var collection = (ICollection)stack;
collection.CopyTo(array, 0);


文章来源: Stack implements ICollection, but has methods from ICollection