我正在尝试对类型列表< T>进行排序与泡沫排序.不幸的是我在比较未知类型的对象时遇到了问题.
到目前为止我尝试过的:
public static void BubbleSort<T>(this List<T> array) { for (int i = (array.Count - 1); i >= 0; i--) { for (int j = 1; j <= i; j++) { if (array[j - 1] > array[j]) // issue here { var temp = array[j - 1]; array[j - 1] = array[j]; array[j] = temp; } } } }
解决方法
如果您不需要除默认比较之外的任何其他内容,则可以使用:
// Todo: Rename the parameter... public static void BubbleSort<T>(this List<T> array) { IComparer<T> comparer = Comparer<T>.Default; ... if (comparer.Compare(array[j - 1],array[j]) > 0) { ... } }
或者允许自定义比较:
public static void BubbleSort<T>(this List<T> array,IComparer<T> comparer) { ... if (comparer.Compare(array[j - 1],array[j]) > 0) { ... } }
或者将T限制为实现IComparable< T>的类型:
public static void BubbleSort<T>(this List<T> array) where T : IComparable<T> { ... if (array[j - 1].Compareto(array[j]) > 0) { ... } }
注意,在这里添加约束意味着任何调用者都需要知道他们使用的类型参数需要实现IComparable< T> …它使编译时更安全,代价是传播的约束呼叫链. (一种选择是允许没有比较器的受约束版本和带有比较器的无约束版本.)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。