不能将运算符'<'应用于T和T类型的操作数

Win*_*der 9 .net c# generics

所以这是我的代码

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])
            {

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在拍摄之前不要搜索.我已经搜索了,其中一个答案在SO上说要使用一个可比较的接口来解决问题.

不幸的是,我不会在这个错误的任何地方.

Joe*_*orn 15

看起来您期望IComparable<T>约束允许您使用不等式运算符.IComparableIComparable<T>没有关于使用直接运营商的不平等.相反,他们所做的是提供一种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)
            {

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 10

如果您无法添加通用约束,则Comparer<T>:

var comparer = Comparer<T>.Default;
Run Code Online (Sandbox Code Playgroud)

非常有用.然后你可以使用comparer.Compare(x,y)(并检查结果为负,零,正); 这支持实现IComparable<T>IComparable包含"提升"对Nullable<T>包装器的支持的类型- 并且Nullable<T>当类型支持时将避免装箱结构和案例IComparable<T>.


SLa*_*aks 5

您不能在泛型类型上使用运算符.

相反,您需要使用以下CompareTo()方法IComparable<T>:

if (array[j].CompareTo(array[j - 1]) < 0)
Run Code Online (Sandbox Code Playgroud)

小心nulls.