当我尝试从 Array 对象调用它时,无法识别 IList 接口中的 Remove 方法
Remove method from IList interface not recognized when I try to call it from an Array object
根据官方docs,C#中的数组实现了以下接口:
IList
IEnumerable
在 IList
的 docs 中,我看到列出的方法之一是 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
),因为数组的大小是固定的 - Remove
和 Add
操作对它们没有意义。这就是为什么这些方法是用显式接口实现来实现的,以避免你不恰当地使用它们...
根据官方docs,C#中的数组实现了以下接口:
IList
IEnumerable
在 IList
的 docs 中,我看到列出的方法之一是 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
),因为数组的大小是固定的 - Remove
和 Add
操作对它们没有意义。这就是为什么这些方法是用显式接口实现来实现的,以避免你不恰当地使用它们...