[英]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中的模式匹配的結果:對於要編譯的類型模式,必須存在從T
到Complex
轉換,但事實並非如此。 C#團隊意識到要求這樣做是錯誤的,因此這個問題已在C#7.1中得到修復 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.