gpt4 book ai didi

c# - 为泛型类实现 IComparable 接口(interface)以比较类型 T

转载 作者:行者123 更新时间:2023-11-30 23:04:18 24 4
gpt4 key购买 nike

我尝试使用 IComparable<T>在泛型类中比较 T 类型的元素时出现以下错误:

"Operator '<' cannot be applied to operands of type 'T' and 'T'"

我想知道是否可以解决这个问题。这是一个简单的例子 IComparable<T>当我定义我的类(class)接受 int 时正在工作:

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

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

关于c# - 为泛型类实现 IComparable<T> 接口(interface)以比较类型 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49470495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com