我正在尝试编写一个泛型方法,它应该支持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;
}
答案 0 :(得分:5)
C#不支持对类型支持的运算符的通用约束。但是,.NET提供了许多提供类似功能的接口。在这种情况下,您需要添加通用约束以确保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;
}
答案 1 :(得分:3)
您可以应用的通用约束将类型限制为那些已使<
运算符重载的类型。
您可以做的最好的事情是将类型限制为实现IComparable<T>
的类型或接受IComparer<T>
类型的参数进行比较(有两种方法,每种方法一种,也可以是值得做。)