簡體   English   中英

C#7.0案例模式匹配泛型參數

[英]C# 7.0 case pattern matching on generic parameter

是否有理由不能通過類型模式處理泛型變量? 請考慮以下代碼:

public static int CompareValues<T>(T left, T right)
{
  switch (left)
  {
    case IComparable<T> comparableDif:
      return comparableDif.CompareTo(right);
    case System.Numerics.Complex c:
      return c.Magnitude
        .CompareTo(((System.Numerics.Complex)(object)right).Magnitude);
    default:
      throw new ArgumentException("unsupported type");
  }
}

IComparable接口上的第一個匹配是可以的,但第二個匹配不編譯。 為什么我必須使用這個拳擊解決方法?

case object o when o is System.Numerics.Complex:
  return ((System.Numerics.Complex)o).Magnitude
    .CompareTo(((System.Numerics.Complex)(object)right).Magnitude);

這是如何定義C#7.0中的模式匹配的結果:對於要編譯的類型模式,必須存在從TComplex轉換,但事實並非如此。 C#團隊意識到要求這樣做是錯誤的,因此這個問題已在C#7.1中得到修復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM