[英]Instantiating an IEnumerable array in C#
我想知道為什么你可以在C#中做到這一點:
IEnumerable<int>[] nums = new IEnumerable<int>[10];
但不能這樣做:
IEnumerable<int> nums = new IEnumerable<int>();
C#在第一個聲明的基礎上做了什么? 我以為你無法使用new關鍵字創建接口實例。
您是正確的,因為您無法在C#中創建接口實例。 這兩個語句之間的區別在於,在第一個語句中,您正在創建一個IEnumerable<int>
數組 ,這是允許的。
如果您創建實現IEnumerable<T>
接口的類的實例(例如List<T>
,則第二個語句將起作用。
這樣做的一個例子是: IEnumerable<int> numbers = new List<int> {1,2,3};
;
你也可以這樣做: IEnumerable<int> numbers = new int[] {1, 2, 3}
第一個語句是創建一個大小為10的新數組,其中項類型為IEnumerable<int>
。 數組本身是您可以創建的具體類型。
要在此數組中設置項目,您可以執行以下操作:
num[0] = new List<int>() {1,2,3};
雖然項類型是IEnumerable<int>
,但您無法創建IEnumerable<int>
的實例。 您必須創建一個實現IEnumerable<int>
的類的實例,如List<int>
。
在第二個示例中,您嘗試創建IEnumerable<int>
的實例,它是一個接口,即不是類,因此它不會編譯。
變量類型仍然可以是IEnumerable<int>
,但您必須創建一個實現IEnumerable<int>
的類的實例,如下所示:
IEnumerable<int> nums = new List<int>() {1,2,3};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.