【发布时间】:2017-06-20 10:27:22
【问题描述】:
我有一个简单的案例,我想使用模式匹配来识别我需要用来在两个通用八叉树之间执行碰撞测试的算法。我的基本情况是三角形的两个八叉树。代码的骨架是。
public class Triangle {
public static bool
Intersects
( IReadOnlyList<Triangle> ta
, IReadOnlyList<Triangle> tb)
{
...
}
}
public class Octree<T> {
public bool Intersects<U>(Octree<U> other)
{
if (this is Octree<Triangle> ota && other is Octree<Triangle> otb)
{
return ota.Intersects( otb, Triangle.Intersects );
}
throw new NotImplementedException();
}
public bool Intersects<U>
( Octree<U> other
, Func<IReadOnlyList<T>, IReadOnlyList<U>, bool> intersectsLeaves
)
{
...
}
}
但会导致以下错误。
Error CS8121
An expression of type Octree<T> cannot be handled by a pattern of type
Octree<Triangle>.
当然,我可以只使用typeof(U) 和typeof(T) 来进行测试,但我认为上面应该真的有效。为什么不呢?
【问题讨论】:
标签: c# generics pattern-matching