c# - 不支持约束的通用方法

标签 c# generics

我正在尝试编写一个通用方法,它应该支持 ex int、double、float 等的内在类型。
该方法是对数组进行排序。
我收到一个编译时错误,说“无法将运算符 < 应用于类型 T”,这是我理解的,但我该如何解决呢?我应该使类通用并使用约束吗?
这是我的代码:

public static T[] Sort<T>(T[] inputArray) 
{
    for (int i = 1; i < inputArray.Length; i++)
    {
        for (int j = i - 1; j >= 0; j--)
        {
            ***if (inputArray[j + 1] < inputArray[j])***
            {
                T temp = inputArray[j + 1];
                inputArray[j + 1] = inputArray[j];
                inputArray[j] = temp;
            }
            else
            {
                break;
            }
        }
    }
    return inputArray;
}

最佳答案

C# 不支持对类型支持的运算符的通用约束。但是,.NET 提供了许多提供类似功能的接口(interface)。在这种情况下,您需要添加一个通用约束以确保 T实现 IComparable<T> .

public static T[] Sort<T>(T[] inputArray) where T : IComparable<T>
{
    for (int i = 1; i < inputArray.Length; i++)
    {
        for (int j = i - 1; j >= 0; j--)
        {
            if (inputArray[j + 1].CompareTo(inputArray[j]) < 0)
            {
                T temp = inputArray[j + 1];
                inputArray[j + 1] = inputArray[j];
                inputArray[j] = temp;
            }
            else
            {
                break;
            }
        }
    }
    return inputArray;
}

关于c# - 不支持约束的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21610454/

相关文章:

c# - Visual Studio 中 Web 应用程序的控制台输出

c# - 复选框显示为空白的 WPF 列表框,动态添加

c# - 在 C# 中验证 URL 的一种比 try-catch 更好的方法?

java - 如何包装 Google Guice 的 Injector 方法?

java - 使用泛型强制执行类声明

java - 泛型不从 "this"自动推断类型?

javascript - 如何在类型中传递泛型类型?

C#:当一个字段可以是不同类型时反序列化 JSON

c# - 通用和非通用接口(interface)

C#从csv中提取数据