C# Pattern Matching 的一個小細節
近來大家應該都開始用 Pattern Matching 了,這裡邊有一個小細節需要注意。
我們用以下的範例來解釋這個行為,假設我們有一個這樣的方法:
static void Test(object o)
{
if (o is {})
{
Console.WriteLine("process o is {}");
}
if (o is {} x)
{
Console.WriteLine("process o is {} x");
}
if (o is object y)
{
Console.WriteLine("process o is object y");
}
if (o is var z)
{
Console.WriteLine("process o is var z");
}
}
當使用非 null 值呼叫此方法時,會得到以下結果:
static void Main(string[] args)
{
Test(new object());
}
結果:
process o is {}
process o is {} x
process o is object y
process o is var z
process o is {} x
process o is object y
process o is var z
如果傳入的是 null 呢?
static void Main(string[] args)
{
Test(null);
}
則會得到這樣的結果:
process o is var z
根據以上的範例,可以得知在前三個評估方式都會評估 o 是否為 null,而使用 var 的時候則不會評估 o 是否為 null; Type Pattern Matching 使用 var 要謹慎。
參考資料: