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

use*_*882 2 c# arrays interface

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

  • IList
  • IEnumerable

在的文档IList中,我看到列出的方法之一是Remove执行以下操作的方法:

从 IList 中删除第一次出现的特定对象。

我想使用这种方法,所以我编写了以下最小程序:

class RemoveAllOccurences {

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

    }
}
Run Code Online (Sandbox Code Playgroud)

然后我编译了以下内容:

csc test.cs -out:test.exe

运行可执行文件引发以下错误:

remove_issue.cs(7,11): 错误 CS1061: 'int[]' 不包含 'Remove' 的定义,并且找不到接受类型 'int[]' 的第一个参数的可访问扩展方法 'Remove' (您缺少 using 指令或程序集引用吗?)

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

我在这里做错了什么?

Jon*_*eet 6

数组IList.Remove通过显式接口实现来实现,这意味着您只能通过具有接口类型的编译时类型的引用来访问它。例如:

int[] a = {1, 0, 0, 3};
IList list = a;
list.Remove(0);
Run Code Online (Sandbox Code Playgroud)

这样编译就没有问题了。NotSupportedException然而,它会在执行时抛出异常 ( ),因为数组的大小是固定的 -Remove并且Add对它们进行操作没有意义。这就是为什么这些方法是通过显式接口实现来实现的,以避免您不恰当地使用它们......