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 要謹慎。
參考資料:
