時,請考慮以下,乍一看荒謬,模式匹配:不同的行爲模式匹配使用VAR或顯式類型
string s = null;
if (s is string ss) //false
if (s is string) //false
兩個is
將返回false
。但是,如果我們使用var
的行爲完全改變:
string s = null;
if (s is var ss) //true!?!
如果您在VS2017懸停在var
,型號爲string
但is
的行爲是完全不同的。即使推斷類型相同,編譯器也在做一些完全不同的事情。怎麼會這樣?這是一個錯誤? null
類型以某種方式冒出來?
是不是'var ss'定義新的空變量? 這裏:https://visualstudiomagazine.com/articles/2017/02/01/pattern-matching.aspx 你可以看到它是創建需要類型的臨時變量,然後你可以檢查條件是否爲真。 – sTrenat
@sTrenat好的,爲什麼'字符串ss'不是? – InBetween
我認爲運算符'是'在做.GetType()然後檢查類型是否好,對於null,沒有指定類型,所以它不能檢查它。 對於新的'var'操作符,它分配他所得到的任何東西 – sTrenat