Не могу добавить данные в SortedList C # - PullRequest
2 голосов
/ 11 июня 2019

У меня есть простой код, в котором я хочу заполнить свой SortedList некоторыми данными из массивов.

namespace Test
{
    class TestClass
    {
        public int ValueInt { get; set; }
        public char ValueChar { get; set; }
    }

    class MainClass
    {
        public static void Main(string[] args)
        {
            int[] arr1 = { 1, 2, 3 };
            char[] arr2 = { 'a', 'b', 'c' };

            SortedList<TestClass, char> list = new SortedList<TestClass, char>();

            for (int i = 0; i < 3; i++)
            {
                list.Add(new TestClass() { ValueInt = arr1[i], ValueChar = arr2[i]}, '+');
            }

            foreach (KeyValuePair<TestClass, char> kvp in list)
            {
                Console.WriteLine(
                "Key1 = {0}, Key2 = {1}, Value = {2}", 
                    kvp.Key.ValueInt, kvp.Key.ValueChar, kvp.Value
                    );
            }
        }
    }
}

Ошибка сброса программы:

System.InvalidOperationException (Failedдля сравнения двух элементов в массиве)

Программа сгенерирует его в точке второй итерации этого цикла:

list.Add(new TestClass() { ValueInt = arr1[i], ValueChar = arr2[i]}, '+');

HOWEVER , программа работает, еслиЯ изменяю SortedList на Dictionary

Как я могу заставить мою Программу работать с SortedList?

1 Ответ

3 голосов
/ 11 июня 2019

TestClass должен реализовывать IComparable -интерфейс.

SortedList требуется реализация компаратора для сортировки и проводить сравнения (см. MS документы )

class TestClass : IComparable<TestClass>
{
    public int ValueInt { get; set; }
    public char ValueChar { get; set; }

    public int CompareTo(TestClass other)
    {
        if (ReferenceEquals(this, other)) return 0;
        if (ReferenceEquals(null, other)) return 1;

        var valueIntComparison = ValueInt.CompareTo(other.ValueInt);
        if (valueIntComparison != 0) return valueIntComparison;

        return ValueChar.CompareTo(other.ValueChar);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...