neo*_*nxc 13 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");
}
}
Run Code Online (Sandbox Code Playgroud)
IComparable接口上的第一个匹配是可以的,但第二个匹配不编译.为什么我必须使用这个拳击解决方法?
case object o when o is System.Numerics.Complex:
return ((System.Numerics.Complex)o).Magnitude
.CompareTo(((System.Numerics.Complex)(object)right).Magnitude);
Run Code Online (Sandbox Code Playgroud)
svi*_*ick 12
这是一个模式是如何匹配在C#7.0中定义的结果:你的类型模式来编译,从铸造T到Complex必须存在,但事实并非如此.C#团队意识到要求这样做是错误的,因此这个问题已在C#7.1中得到修复.
| 归档时间: |
|
| 查看次数: |
5254 次 |
| 最近记录: |