所以这是我的代码
public void BubbleSort<T>(T[] array) where T : IComparable<T>
{
for (int i = 0; i < array.Length; i++)
{
for (int j = 1; j < array.Length; j++)
{
if (array[j] < array[j - 1])
{
}
}
}
}
在拍摄之前,请不要搜索。我已经搜索过,其中一个答案在SO上表示要使用一个可比较的界面来解决问题。
不幸的是,我不会因为这个错误而去任何地方。
答案 0 :(得分:15)
看起来你期望IComparable<T>
约束允许你使用不等式运算符。 IComparable
和IComparable<T>
直接使用不等运算符说 nothing 。相反,他们所做的是提供一种CompareTo()
方法,您可以使用模拟不等式运算符:
public void BubbleSort<T>(T[] array) where T: IComparable<T>
{
for (int i = 0; i < array.Length; i++)
{
for (int j = 1; j < array.Length; j++)
{
if (array[j].CompareTo(array[j-1]) < 0)
{
}
}
}
}
答案 1 :(得分:9)
如果您无法添加通用约束,那么Comparer<T>
:
var comparer = Comparer<T>.Default;
非常有用。然后,您可以使用comparer.Compare(x,y)
(并检查结果为负,零,正);这支持实现IComparable<T>
或IComparable
的类型,包括对Nullable<T>
包装器的“提升”支持 - 并且当类型支持{{{}时,将避免对结构和Nullable<T>
情况进行装箱1}}。
答案 2 :(得分:5)
您不能在泛型类型上使用运算符。
相反,您需要使用CompareTo()
中的IComparable<T>
方法:
if (array[j].CompareTo(array[j - 1]) < 0)
小心null
s。
答案 3 :(得分:3)
因此,您将T
声明为IComparable
,请使用其IComparable.CompareTo方法:
if (array[j].CompareTo(array[j-1]) < 0)
{
}