现在,我知道在C#中,数组是固定大小的集合。这是有道理的,您不能对它们使用RemoveAt
方法except that the System.Array
class, which all array types extend from, implements the System.Collections.IList
interface,而这需要RemoveAt
方法。
如果是you upcast an array to an IList
, or pass it to a method taking an IList
as an argument,则可以在其上调用.RemoveAt
,这将在运行时抛出NotSupportedException
。但是,如果我不修改它,and call it directly,尽管方法明确存在,它将导致编译器错误'int[]' does not contain a definition for 'RemoveAt'
。
是什么让编译器在编译时捕获此NotSupportedException
?它是数组的特例,还是我可以定义自己的类以具有这种行为?
最佳答案
数组实际上不应该实现IList,因为它没有完全实现该接口(interface),因此不是NotSupportedException,但为方便起见添加了它。
调用Array.RemoveAt时无法编译的原因是因为Array实现了IList explicitly的方法,这意味着该方法除非将其强制转换为该接口(interface),否则不可用。
看起来像:
class OnlySortOfAList : IList
{
void IList.RemoveAt(int Index) // note the lack of access modifier
{
throw new NotSupportedException();
}
}