簡體   English   中英

Enumerable.Empty 需要顯式轉換<T>

[英]Explicit cast required for Enumerable.Empty<T>

到目前為止,我讀過的每個示例(谷歌結果/堆棧問題)都解釋了“Enumerable.Empty”的使用,說明我應該能夠將它與數組一起使用。 然而,VS 編譯器不允許我使用它,除非我明確地將它轉換為數組,盡管定義了類型。

為什么是這樣? (我在大約 20 個相關的堆棧問題或我看過的一般谷歌結果中沒有看到需要演員表的參考)

//The internet says this should work, but i get a "Cannot implicitly convert type" error
public byte[] dataA = Enumerable.Empty<byte>();
public string[] dataB = Enumerable.Empty<string>(); 

//Throws no error, but the cast's requirement is never mentioned
public byte[] dataA = (byte[])Enumerable.Empty<byte>();
public string[] dataB = (string[])Enumerable.Empty<string>();

Enumerable.Empty生成一個空序列,而不是一個數組。

如果要將序列轉換為數組,則可以調用ToArray

byte[] dataA = Enumerable.Empty<byte>().ToArray();
string[] dataB = Enumerable.Empty<string>().ToArray(); 

如果你真的想要一個空數組,那么為什么不說:

byte[] dataA = new byte[0];
string[] dataB = new string[0];

您的轉換可能會起作用,但這在很大程度上取決於Empty的實現方式。 它可能只返回一個空數組,或者它可能返回實現IEnumerable但為空的其他內容。

你的意思是Array.Empty<T> ,而不是 Enumerable:

public byte[] dataA = Array.Empty<byte>();
public string[] dataB = Array.Empty<string>(); 
  1. 您可以使用ToArray() Linq 方法從IEnumerable<T>獲取Array<T> IEnumerable<T> 因此,如前所述,您可以使用Enumerable.Empty<T>創建一個空序列,然后將其轉換為數組。

  2. 請注意,通常靜態Array<T>.Empty是創建空數組的推薦方法,如果您明確需要的話。

  3. 如果可以,請避免使用那些類型轉換(byte[]) ,它們將來可能會咬你一口。 事實上,它根本不是必需的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM