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

时间:2012-05-14 19:26:12

标签: .net stack generic-collections interface-implementation

我正在尝试基于Stack<T>创建自定义集合。当我在visual studio中查看Stack<T> [来自元数据]时,它会显示Stack<T>实现ICollection,这需要它实现ICollection的{​​{1}}方法,但相反,它显示为具有CopyTo(Array array, index)的{​​{1}}方法。有人可以解释为什么会这样吗?

我正在尝试创建一个模仿ICollection<T>的集合。当我像堆栈一样实现CopyTo(T[] array, index)时,它需要我使用Stack<T>方法,但我真正想要的是使用ICollection方法,例如{ {1}}。有没有办法实现这一点而不实施CopyTo(Array array, index)

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

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

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