【问题标题】:GenericArguments[1], 'T', on 'BinaryNode`2[N,T]' violates the constraint of type parameter 'T'GenericArguments[1], 'T', on 'BinaryNode`2[N,T]' 违反了类型参数 'T' 的约束
【发布时间】:2013-08-31 04:34:49
【问题描述】:

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

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

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', on 'Node`2[N,T]' 违反了类型参数 'T' 的约束。

【问题讨论】:

  • 我实际上看不出这段代码有什么问题。错误在这里抱怨什么吗?还是当您在代码的不同部分实例化它时?
  • 如果你透露你的 BinaryNode 类定义,你可能会得到帮助。
  • @TimothyShields 我将所有内容从 BinaryNode 重命名为 Node 以使问题更简单。所有代码都存在。

标签: c# templates generics recursive-datastructures


【解决方案1】:

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

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
{
}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2023-02-03
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多