2017-04-24 72 views
2

之前,C#7.0,下面的代碼是有效的:不同的是X是X _

if(x is X) 
{ 
    //... 
} 

現在,下面也是正確的:

if(x is X _) 
{ 
    //... 
} 

Accoding到TryRoslyn,這些代碼段生成相同的IL。我的問題是:模式匹配中丟棄操作符的用途是什麼?我在這裏錯過了什麼嗎?

這個問題與that不一樣,因爲我要求丟棄運算符(通配符)的目的是專門用於模式匹配(is運算符)。

+0

這個問題是專門針對'is'還是你只是想知道'_'通配符能派上用場? – EpicKip

+0

@epickip專門用於'is' – Logerfo

+3

有無數的編寫代碼的方法是無用的。 *禁止*您編寫對您無用的代碼不是C#的工作。即使*嘗試了*,它也不能這樣做。 C#的工作是*允許*您編寫* *有用的代碼。 – Servy

回答

2

根據Neal Gafter,丟棄運算符在這種情況下是這是非常沒用的,至少現在。

1

這還沒有用。但是,當引入遞歸模式匹配(希望在C#8.0中)時,在模式的一部分中放棄丟棄會很有用。

細節尚未最終確定,但可以想象如is (1, (_, 3))或可能的is X (1, Y (_, 3))