gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:59:22 25 4
gpt4 key购买 nike

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

  • 列表
  • IEnumerable

docs对于 IList,我看到列出的方法之一是 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 接口(interface)的一部分。

我在这里做错了什么?

最佳答案

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

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

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

关于c# - 当我尝试从 Array 对象调用它时,无法识别 IList 接口(interface)中的 Remove 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72214822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com