'BinaryNode`2 [N,T]'上的GenericArguments [1],'T'违反了类型参数'T'的约束

时间:2013-08-31 04:34:50

标签: c# templates generics recursive-datastructures

这条错误消息到底在抱怨什么?

我正在尝试创建一个节点类,它可以保存一个值并指向其他节点,并且可以扩展为在每个节点中嵌入更多信息。递归模板给了我一些问题。

public class ColoredNode<T> : Node<ColoredNode<T>, T>
    where T : IComparable
{
    public ConsoleColor Color; 
}

public class BaseNode<T> : Node<BaseNode<T>, T>
    where T : IComparable
{
}

abstract public class Node<N, T>
    where N : Node<N, T>, new()
    where T : IComparable
{
    public N Parent;
    public N Child;
    public T Value;
}

GenericArguments [1],'T','Node`2 [N,T]'违反了类型参数'T'的约束。

1 个答案:

答案 0 :(得分:0)

我设法得到一个简单的重复案例:

public class Node<T> : Node<Node<T>, T>
    where T : IComparable
{
}

abstract public class Node<N, T>
    where N : Node<N, T>, new()
    where T : IComparable
{
}

我注意到,抛出的错误消息是在我的test cs项目中,而不是Node类所在的cs项目。但是,没有与错误关联的行或文件。如果我从解决方案中排除了我的测试项目,那么解决方案就会成功构建。

我不知道为什么会这样,但我终于尝试排除测试项目自动生成的文件夹“Test References”,其中包含一个DataStructures.accessor文件。排除该文件似乎解决了这个问题。