所以这是我的代码
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>
约束允许您使用不等式运算符.IComparable
并IComparable<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>
.
您不能在泛型类型上使用运算符.
相反,您需要使用以下CompareTo()
方法IComparable<T>
:
if (array[j].CompareTo(array[j - 1]) < 0)
Run Code Online (Sandbox Code Playgroud)
小心null
s.