为泛型 class 实现 IComparable<T> 接口以比较类型 T
Implementing IComparable<T> Interface for a generic class to compare type T
我尝试在泛型 class 中使用 IComparable<T>
来比较类型 T 的元素,但出现以下错误:
"Operator '<' cannot be applied to operands of type 'T' and 'T'"
我想知道是否可以解决这个问题。
这是一个简单的例子,当我定义我的 class 以接受 int:
时,IComparable<T>
正在工作
public class IntStack : IComparable<IntStack>
{
public int[] stack = new int[2];
public int CompareTo(IntStack other)
{
// If the current stack < other stack return -1
// If the current stack > other stack return +1
// If current stack entries == other stack entries return 0
for (var current = 0; current < 2; current++)
{
if (stack[current] < other.stack[current])
{
return -1;
}
else if (stack[current] > other.stack[current])
{
return 1;
}
}
return 0;
}
}
当我将上面的 class 更改为通用时,IComparable<T>
现在在这里不起作用:
public class Mystack<T> : IComparable<Mystack<T>> where T : IComparable
{
public T[] stack = new T[2];
public int CompareTo(Mystack<T> other)
{
// If the current stack < other stack return -1
// If the current stack > other stack return +1
// If current stack entries == other stack entries return 0
for (var current = 0; current < 2; current++)
{
if (stack[current] < other.stack[current])
{
return -1;
}
else if (stack[current] > other.stack[current])
{
return 1;
}
}
return 0;
}
您收到此错误的原因是您不能对 IComparable 使用不等运算符(“<”、“>”),除非您覆盖它们。
您可以改用 CompareTo()。
public class Mystack<T> : IComparable<Mystack<T>> where T : IComparable
{
public T[] stack = new T[2];
public int CompareTo(Mystack<T> other)
{
// If the current stack < other stack return -1
// If the current stack > other stack return +1
// If current stack entries == other stack entries return 0
for (var current = 0; current < 2; current++)
{
if (stack[current].CompareTo(other.stack[current]) < 0)
{
return -1;
}
else if (stack[current].CompareTo(other.stack[current]) > 0)
{
return 1;
}
}
return 0;
}
我尝试在泛型 class 中使用 IComparable<T>
来比较类型 T 的元素,但出现以下错误:
"Operator '<' cannot be applied to operands of type 'T' and 'T'"
我想知道是否可以解决这个问题。 这是一个简单的例子,当我定义我的 class 以接受 int:
时,IComparable<T>
正在工作
public class IntStack : IComparable<IntStack>
{
public int[] stack = new int[2];
public int CompareTo(IntStack other)
{
// If the current stack < other stack return -1
// If the current stack > other stack return +1
// If current stack entries == other stack entries return 0
for (var current = 0; current < 2; current++)
{
if (stack[current] < other.stack[current])
{
return -1;
}
else if (stack[current] > other.stack[current])
{
return 1;
}
}
return 0;
}
}
当我将上面的 class 更改为通用时,IComparable<T>
现在在这里不起作用:
public class Mystack<T> : IComparable<Mystack<T>> where T : IComparable
{
public T[] stack = new T[2];
public int CompareTo(Mystack<T> other)
{
// If the current stack < other stack return -1
// If the current stack > other stack return +1
// If current stack entries == other stack entries return 0
for (var current = 0; current < 2; current++)
{
if (stack[current] < other.stack[current])
{
return -1;
}
else if (stack[current] > other.stack[current])
{
return 1;
}
}
return 0;
}
您收到此错误的原因是您不能对 IComparable 使用不等运算符(“<”、“>”),除非您覆盖它们。
您可以改用 CompareTo()。
public class Mystack<T> : IComparable<Mystack<T>> where T : IComparable
{
public T[] stack = new T[2];
public int CompareTo(Mystack<T> other)
{
// If the current stack < other stack return -1
// If the current stack > other stack return +1
// If current stack entries == other stack entries return 0
for (var current = 0; current < 2; current++)
{
if (stack[current].CompareTo(other.stack[current]) < 0)
{
return -1;
}
else if (stack[current].CompareTo(other.stack[current]) > 0)
{
return 1;
}
}
return 0;
}