我正在尝试基于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)
?
答案 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);