根據官方檔案,C# 中的陣列實作了以下介面:
IListIEnumerable
在檔案中IList,我看到列出的方法之一是Remove執行以下操作的方法:
從 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):錯誤 CS1061:“int[]”不包含“Remove”的定義,并且找不到接受“int[]”型別的第一個引數的可訪問擴展方法“Remove”(是您缺少 using 指令或程式集參考?)
我不確定為什么Remove無法識別,因為正如我之前提到的,它是IList檔案中顯示的界面的一部分。
我在這里做錯了什么?
uj5u.com熱心網友回復:
陣列IList.Remove通過顯式介面實作實作,這意味著您只能通過具有介面型別的編譯時型別的參考來訪問它。例如:
int[] a = {1, 0, 0, 3};
IList list = a;
list.Remove(0);
編譯沒有問題。但是,它會在執行時拋出例外 ( NotSupportedException),因為陣列是固定大小的 -Remove并且Add操作對它們沒有意義。這就是為什么這些方法是用顯式介面實作來實作的,以避免你不恰當地使用它們......
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/472749.html
上一篇:密碼散列和加零
