6

我正在尝试创建一个基于Stack<T>. 当我在 Visual Studio 中查看Stack<T>[来自元数据] 时,它显示Stack<T>implements ICollection,这将要求它实现ICollection'CopyTo(Array array, index)方法,但相反,它显示为具有ICollection<T>'CopyTo(T[] array, index)方法。有人可以解释为什么会这样吗?

我正在尝试创建一个Stack<T>非常模仿的集合。当我ICollection像堆栈一样实现时,它需要我使用该CopyTo(Array array, index)方法,但我真正想要的是使用该CopyTo(T[] array, index)方法,就像这样Stack<T>做一样。有没有办法在不实施的情况下实现这一目标ICollection<T>

4

2 回答 2

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
}
于 2012-05-14T20:19:04.073 回答
0

我猜该方法CopyTo(Array array, index)是明确实现的。这意味着,如果您将对象视为 ICollection,您只会看到该方法:

var collection = (ICollection)stack;
collection.CopyTo(array, 0);
于 2012-05-14T20:34:11.180 回答