轉載 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。