C#7:什么是丟棄物以及如何使用它們


轉載 http://www.devsanon.com/c/using-discards-feature-of-c-7

假設您希望調用一個具有返回值並且也接受out變量的方法,但是您不希望使用將要返回的out變量的內容。
到目前為止,我們正在創建一個虛擬變量,以后將不會使用它或將其丟棄
使用C#7,您現在可以使用“ 丟棄”

 

丟棄是局部變量,可以為它們分配一個值,並且該值無法讀取(丟棄)。本質上,它們是“只寫”變量。

這些丟棄沒有名稱,而是用_(下划線)表示。

因此,讓我們來看下面的示例。
假設我們有一個整數的ConcurrentQueue,我們希望從中出隊某些東西,而實際上沒有使用它。

int outDummy;
if(m_myQueue.TryDequeue(out outDummy))
{
   //do something here
}
else
{
   //do something else here
}

現在,使用C#7,我們可以利用丟棄。

if(m_myQueue.TryDequeue(out _))
{
   //do something here
}
else
{
   //do something else here
}

並且已出列的值將不會也無法使用。

例如下面的代碼

int x = 0;
if(m_myQueue.TryDequeue(out _))
{
   x = _;
}

將不會編譯,也不會出現在IntelliSense中。

但是請記住,由於_是上下文關鍵字,因此如果您使用名稱_聲明變量,則將使用該變量。

int x = 0;
int _;
if(m_myQueue.TryDequeue(out _))
{
   x = _;
}

在上面的代碼中,將從隊列中刪除的值將分配給變量x,因為在上述情況下,下划線用作變量而不是丟棄。

結論

C#中的丟棄功能提供了一種忽略某些局部變量的方法,這是設計時的功能。
在運行時,可能需要一個變量,並且編譯器可能會為其生成一個名稱。
由於_關鍵字是上下文關鍵字,因此您需要設置代碼策略,以避免使用名稱_聲明局部變量,以減少混淆。
此功能與.NET平台的早期版本兼容,因為它不需要更改CLR。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM