Сравнение элементов общего списка

У меня есть TestClass<T>, который превратится в очередь с приоритетом на основе кучи. Куча имеет тип List<T>.

Я работал над изменением порядка кода, и мне нужно было сравнить элементы List<T>. Как вы можете догадаться, я получил error CS0019: Operator < cannot be applied to operands of type T and T.

Я ЗНАЮ, что это не удивительно, и дженерики С# не являются шаблонами С++. Итак, я попытался ограничить Type T с помощью IComparable. Но и это не помогло.

Предложения, которые я нашел (для решения этой проблемы), в основном заключались в создании фиктивного класса, который определяет такие операторы и ограничивает 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;
        }
    }
}

person ciyo    schedule 16.04.2018    source источник
comment
Нет, вопрос, вы удалили, был заменен другим, который < b>это не Python, посмотрите еще раз.   -  person DavidG    schedule 16.04.2018
comment
Более удобно, чем использовать IComparable и предоставить метод, который действительно выполняет сравнение, которое вы хотите сделать? Вам нужно посмотреть на это немного серьезнее.   -  person    schedule 16.04.2018
comment
@DavidG тогда мог бы сказать мне, что, если это дубликат вопроса, который вы предлагаете, почему value.CompareTo(_minimumValue) ›= 0 не решает проблему?   -  person ciyo    schedule 16.04.2018
comment
Это буквально является решением, теперь примените его к своему коду.   -  person DavidG    schedule 16.04.2018
comment
@DavidG, и буквально нет других способов сделать это без использования этого метода?   -  person ciyo    schedule 16.04.2018
comment
Ну что тебе еще нужно? В чем проблема сделать это таким образом?   -  person DavidG    schedule 16.04.2018
comment
@DavidG Мне просто интересно   -  person ciyo    schedule 16.04.2018


Ответы (1)


Используйте IComparable и вместо использования > и < используйте метод CompareTo

value.CompareTo(value2) <= 0
person MistyK    schedule 16.04.2018
comment
В следующий раз, когда будете отвечать, убедитесь, что вы не отвечаете на очевидный дубликат. - person DavidG; 16.04.2018