【问题标题】:Comparing Elements of a Generic List [duplicate]比较通用列表的元素
【发布时间】: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


【解决方案1】:

使用IComparable 而不是使用&gt;&lt; 使用CompareTo 方法

value.CompareTo(value2) <= 0

【讨论】:

  • 下次你回答时,请确保你没有回答明显的重复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2023-04-03
  • 2015-09-30
  • 1970-01-01
  • 2015-08-01
相关资源
最近更新 更多