use*_*882 2 c# arrays interface
根据官方文档,C#中的数组实现了以下接口:
IListIEnumerable在的文档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
我在这里做错了什么?
数组IList.Remove通过显式接口实现来实现,这意味着您只能通过具有接口类型的编译时类型的引用来访问它。例如:
int[] a = {1, 0, 0, 3};
IList list = a;
list.Remove(0);
Run Code Online (Sandbox Code Playgroud)
这样编译就没有问题了。NotSupportedException然而,它会在执行时抛出异常 ( ),因为数组的大小是固定的 -Remove并且Add对它们进行操作没有意义。这就是为什么这些方法是通过显式接口实现来实现的,以避免您不恰当地使用它们......