Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 泛型BubbleSort扩展 publicstatict[]BubbleSort(此T[]arr),其中T:class { 对于(int i=0;i”不能应用于“T”和“T”类型的操作数_C#_Generics - Fatal编程技术网

C# 泛型BubbleSort扩展 publicstatict[]BubbleSort(此T[]arr),其中T:class { 对于(int i=0;i”不能应用于“T”和“T”类型的操作数

C# 泛型BubbleSort扩展 publicstatict[]BubbleSort(此T[]arr),其中T:class { 对于(int i=0;i”不能应用于“T”和“T”类型的操作数,c#,generics,C#,Generics,如何创建通用冒泡排序扩展方法?这里有没有办法处理比较的问题? 错误1运算符“>”不能应用于“T”和“T”类型的操作数您不能使用您不能使用您可以将T限制为i可比较,如下所示: public static T[] BubbleSort<T>(this T[] arr) where T : class { for (int i = 0; i < arr.Length; i++) { for (int j = 0;

如何创建通用冒泡排序扩展方法?这里有没有办法处理比较的问题?
错误1运算符“>”不能应用于“T”和“T”类型的操作数您不能使用
您不能使用
您可以将
T
限制为
i可比较
,如下所示:

    public static T[] BubbleSort<T>(this T[] arr) where T : class
    {
        for (int i = 0; i < arr.Length; i++)
        {
            for (int j = 0; j < arr.Length-1; j++)
            {
                if (arr[j - 1] > arr[j])
                    swap(arr[j - 1], arr[j]);
            }
        }
    }
publicstaticvoidbubblesort(此T[]arr),其中T:IComparable
{
对于(int i=0;i0
掉期(arr[j],arr[j+1]);
}
}
}

它的优点是T也可以是像
int
这样的值类型。此外,当函数更改
数组时,不需要返回数组。

您可以将
T
限制为
i可比较
,如下所示:

    public static T[] BubbleSort<T>(this T[] arr) where T : class
    {
        for (int i = 0; i < arr.Length; i++)
        {
            for (int j = 0; j < arr.Length-1; j++)
            {
                if (arr[j - 1] > arr[j])
                    swap(arr[j - 1], arr[j]);
            }
        }
    }
publicstaticvoidbubblesort(此T[]arr),其中T:IComparable
{
对于(int i=0;i0
掉期(arr[j],arr[j+1]);
}
}
}

它的优点是T也可以是像
int
这样的值类型。此外,当函数更改
数组时,不需要返回数组。

可以通过以下几种方法执行此操作:

  • 要求T实现
    IComparable
    ,并使用
    CompareTo
    方法进行比较
  • 添加第二个类型为
    IComparer
    的参数,该参数实现自定义比较。然后,您将使用此比较器对象进行键比较

  • 您可以通过以下几种方式来实现此目的:

  • 要求T实现
    IComparable
    ,并使用
    CompareTo
    方法进行比较
  • 添加第二个类型为
    IComparer
    的参数,该参数实现自定义比较。然后,您将使用此比较器对象进行键比较

  • 你在问什么?看起来您确实创建了一个扩展方法。也许您只是想确保
    T
    实现了
    i可比较性
    ?它不起作用。错误1运算符“>”不能应用于“T”和“T”类型的操作数。我认为OP需要一个比较类的实现,而不是
    x>y
    ,但它不清楚。更重要的是,为什么要使用bubblesort?这基本上是最糟糕的。@John:也许只是一些编程练习。从实现各种排序算法开始并不少见。你在问什么?看起来您确实创建了一个扩展方法。也许您只是想确保
    T
    实现了
    i可比较性
    ?它不起作用。错误1运算符“>”不能应用于“T”和“T”类型的操作数。我认为OP需要一个比较类的实现,而不是
    x>y
    ,但它不清楚。更重要的是,为什么要使用bubblesort?这基本上是最糟糕的。@John:也许只是一些编程练习。从实现各种排序算法开始并不少见。