【发布时间】:2018-04-16 13:33:41
【问题描述】:
我有一个TestClass<T>,它将演变为基于堆的优先级队列。堆是List<T> 类型。
我正在重新排序代码,我需要比较List<T> 的元素。你可以猜到我收到了error CS0019: Operator < cannot be applied to operands of type T and T。
我知道这并不奇怪,C# 泛型不是 C++ 模板。所以,我尝试用IComparable 约束Type T。但这也无济于事。
我发现的建议(为了解决这个问题)主要是创建一个虚拟类来定义此类运算符并使用此类约束T。但是,我发现这个解决方案不是很方便。
那么,还有其他方法可以解决这个问题吗?
这是相关的代码:
using System;
using System.Collections.Generic;
public class TestClass<T>
where T : IComparable
{
private List<T> heap;
public TestClass(int maxSize)
{
this.heap = new List<T>(maxSize + 1);
}
private void ReorderUpwards(int nodeIndex)
{
while (nodeIndex > 1 && this.heap[nodeIndex / 2] < this.heap[nodeIndex])
{
nodeIndex /= 2;
}
}
}
【问题讨论】:
-
不,you deleted 的问题被另一个不是 Python 的人骗了,再看一遍。
-
比使用 IComparable 并提供一种实际进行您想要进行比较的方法更方便吗?您需要更加努力地看待这一点。
-
@DavidG 那么请告诉我,如果这是您建议的问题的重复,那么“value.CompareTo(_minimumValue) >= 0”为什么不能解决问题?
-
这确实是解决方案,现在将它应用到您的代码中。
-
@DavidG 如果不使用这种方法,真的没有其他方法可以做到吗?
标签: c# generics generic-list