比较通用列表的元素
Comparing Elements of a Generic List
我有一个 TestClass<T>
将演变成基于堆的优先级队列。堆是List<T>
类型。
我正在重新排序代码,我需要比较 List<T>
的元素。如您所料,我收到了 error CS0019: Operator < cannot be applied to operands of type T and T
.
我知道这并不奇怪,C# 泛型不是 C++ 模板。所以,我试图用 IComparable
来限制 Type T
。但它也没有帮助。
我找到的建议(为了解决这个问题)主要是创建一个虚拟 class 来定义此类运算符并用此 class 约束 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;
}
}
}
使用 IComparable
而不是使用 >
和 <
使用 CompareTo
方法
value.CompareTo(value2) <= 0
我有一个 TestClass<T>
将演变成基于堆的优先级队列。堆是List<T>
类型。
我正在重新排序代码,我需要比较 List<T>
的元素。如您所料,我收到了 error CS0019: Operator < cannot be applied to operands of type T and T
.
我知道这并不奇怪,C# 泛型不是 C++ 模板。所以,我试图用 IComparable
来限制 Type T
。但它也没有帮助。
我找到的建议(为了解决这个问题)主要是创建一个虚拟 class 来定义此类运算符并用此 class 约束 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;
}
}
}
使用 IComparable
而不是使用 >
和 <
使用 CompareTo
方法
value.CompareTo(value2) <= 0