C#中的比较:运算符'<';无法应用于类型为';T';和';T';
我已经创建了一个C#中的比较:运算符'<';无法应用于类型为';T';和';T';,c#,generics,C#,Generics,我已经创建了一个二进制树节点类,然后为二进制树类创建了添加(T数据)方法 当我尝试比较对象的值时,编译器说: 运算符“研究如何使用来缩小T可以是的类型。这样,您就可以确保可以使用操作员对它们进行比较 目前,T可以是任何物体。例如,如果你有一个Car对象,编译器怎么知道说一辆车“小于”或“大于”另一辆车是什么意思?这就是您需要约束的原因。您应该添加一个约束,使T必须实现IComparable,然后使用该约束: public class BinaryTree<T> where T : I
二进制树节点
类,然后为二进制树
类创建了添加(T数据)
方法
当我尝试比较对象的值时,编译器说:
运算符“研究如何使用来缩小T可以是的类型。这样,您就可以确保可以使用操作员对它们进行比较
目前,T可以是任何物体。例如,如果你有一个Car对象,编译器怎么知道说一辆车“小于”或“大于”另一辆车是什么意思?这就是您需要约束的原因。您应该添加一个约束,使T必须实现
IComparable
,然后使用该约束:
public class BinaryTree<T> where T : IComparable<T>
{
public void AddNode(T data)
{
BinaryTreeNode<T> node = new BinaryTreeNode<T>(data);
BinaryTreeNode<T> temp = root;
if (temp.Value.CompareTo(node.Value) < 0)
...
public class BinaryTree<T> where T : IComparable<T>
{
private readonly IComparer<T> comparer;
public BinaryTree(IComparer<T> comparer)
{
this.comparer = comparer;
...
}
public void AddNode(T data)
{
BinaryTreeNode<T> node = new BinaryTreeNode<T>(data);
BinaryTreeNode<T> temp = root;
if (comparer.Compare(temp.Value, node.Value) < 0)
公共类二进制树,其中T:IComparable
{
公共无效添加节点(T数据)
{
BinaryTreeNode=新的BinaryTreeNode(数据);
二元树节点温度=根;
如果(温度值比较到(节点值)<0)
...
另一种方法是传入一个i比较程序
,然后使用:
public class BinaryTree<T> where T : IComparable<T>
{
public void AddNode(T data)
{
BinaryTreeNode<T> node = new BinaryTreeNode<T>(data);
BinaryTreeNode<T> temp = root;
if (temp.Value.CompareTo(node.Value) < 0)
...
public class BinaryTree<T> where T : IComparable<T>
{
private readonly IComparer<T> comparer;
public BinaryTree(IComparer<T> comparer)
{
this.comparer = comparer;
...
}
public void AddNode(T data)
{
BinaryTreeNode<T> node = new BinaryTreeNode<T>(data);
BinaryTreeNode<T> temp = root;
if (comparer.Compare(temp.Value, node.Value) < 0)
公共类二进制树,其中T:IComparable
{
专用只读IComparer比较器;
公共二叉树(IComparer comparer)
{
this.comparer=比较器;
...
}
公共无效添加节点(T数据)
{
BinaryTreeNode=新的BinaryTreeNode(数据);
二元树节点温度=根;
if(比较器比较(温度值、节点值)<0)
这是最接近于保证“值的类型(int、string、char[]、MyClass、YourClass等)不支持“youreally have a class name”t的方法"太棒了。我应该在3hrs之前问一下:-)。你能补充一下如何为没有实现它的Ts实现IComparable吗。如果T本身没有实现
IComparable
,那么你可能想改用IComparaer
方法-实现起来非常简单,你只需比较给定的值并返回一个负数即可数字、正数或0,具体取决于该比较。谢谢。您消除了无法比较它们的疑问。(+1)
public class MyData : IComparable<MyData>
{
public int CompareTo(MyData other)
{
// return -1 if 'this' is smaller than other, 0 if equals, 1 otherwise
}
}
if( temp.Value.CompareTo(node.Value) < 0 )