我有这样的通用类.NET泛型拳击编译错误
public class BinaryTreeNode<T> where T : IComparable
{
public BinaryTreeNode(T value)
{
Value = value;
}
public T Value;
public BinaryTreeNode<T> Right;
public BinaryTreeNode<T> Left;
public BinaryTreeNode<T> Parent;
}
和测试类
public class BinarySearchTree<T> where T : IComparable
{
BinaryTreeNode<T> _root = null;
...
}
和静态测试方法
public static class TestBST
{
public static BinarySearchTree<T> GetABuiltBST<T>(List<T> valuesToAdd)
{
BinarySearchTree<T> tree = new BinarySearchTree<T>();
foreach (T i in valuesToAdd)
{
tree.Add(i);
}
return tree;
}
}
现在,我得到这个编译此静态方法中的错误
错误1类型'T'不能用作泛型类型或方法'DsLib.BinarySearchTree'中的类型参数'T'。没有从'T'到'System.IComparable'的装箱转换或类型参数转换
这里发生了什么问题?以及何时添加通用方法名称后(GetABuiltBST * < T> *)?我甚至需要吗?为了摆脱类似的错误,我在之前将方法名称放在后面,我没有详细介绍那个时间。
如果我删除,我得到错误“的类型或命名空间名称‘T’找不到(是否缺少using指令或程序集引用?)”
顺便说一句,如果我不限制ŧ与IComparable然后一切工作得很好。
我用IComparable但这是编译错误。 (并且我在某处阅读共振),因为T应该实现IComparable并且不能实现ICOmparable 本身。 –
2011-05-29 21:10:22
我有一个BinarySearchTree类里面的方法,它是public static void PrintValueStatusInBST(BinarySearchTree tree,T value)。在这里,我不需要约束,甚至没有方法名称后的(如PrintValueStatusInBST )为什么? –
2011-05-29 21:11:00
在这种特定情况下,您需要将其实现为IComparable>'BinarySearchTree '的'T'和'IComparable '的'T'不应该是相同的。 –
CodesInChaos
2011-05-29 21:11:44