C#7.0案例模式匹配泛型参数

时间:2017-06-25 08:02:29

标签: c# generics switch-statement c#-7.0

是否有理由不能通过类型模式处理泛型变量?请考虑代码:

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);

1 个答案:

答案 0 :(得分:11)

这是如何定义C#7.0中的模式匹配的结果:对于要编译的类型模式,必须存在从TComplex的强制转换,但事实并非如此。 C#团队意识到要求这样做是错误的,所以this issue was fixed in C# 7.1