Stack <T>实现ICollection,但具有来自ICollection <T>的方法

Thi*_*heT 6 .net stack generic-collections interface-implementation

我正在尝试创建一个基于的自定义集合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>

Jep*_*sen 3

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

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
}
Run Code Online (Sandbox Code Playgroud)