当我尝试从 Array 对象调用它时,无法识别 IList 接口中的 Remove 方法

Remove method from IList interface not recognized when I try to call it from an Array object

根据官方docs,C#中的数组实现了以下接口:

IListdocs 中,我看到列出的方法之一是 Remove 方法,它执行以下操作:

Removes the first occurrence of a specific object from the IList.

我想用这个方法,所以我写了下面的最小程序:

class RemoveAllOccurences {

    static void Main() 
    {
        int[] a = {1, 0, 0, 3};
        
        a.Remove(0);

    }
}

然后我编译了以下内容:

csc test.cs -out:test.exe

运行 可执行文件抛出以下错误:

remove_issue.cs(7,11): error CS1061: 'int[]' does not contain a definition for 'Remove' and no accessible extension method 'Remove' accepting a first argument of type 'int[]' could be found (are you missing a using directive or an assembly reference?)

我不确定为什么无法识别 Remove,因为正如我之前提到的,它是文档中显示的 IList 界面的一部分。

我做错了什么?

数组通过 explicit interface implementation 实现 IList.Remove,这意味着您只能通过具有 compile-time 类型接口类型的引用来访问它。例如:

int[] a = {1, 0, 0, 3};
IList list = a;
list.Remove(0);

编译没有问题。但是,它随后会在执行时抛出异常 (NotSupportedException),因为数组的大小是固定的 - RemoveAdd 操作对它们没有意义。这就是为什么这些方法是用显式接口实现来实现的,以避免你不恰当地使用它们...