Как сравнить массив/словарь?

Есть ли способы использовать метод CompareTo на массивах и словарях? Пример такого использования

using System;

public class Program
{
    public static void Main()
    {
        List<int> list1 = new List<int> {
            1, 2, 3, 4, 5
        };
        List<int> list2 = new List<int> {
            5, 4, 3, 2, 1
        };
        List<int> list3 = new List<int> {
            1, 2, 3, 4, 5
        };
        Console.WriteLine(list1.CompareTo(list2)); // -1
        Console.WriteLine(list1.CompareTo(list3)); // 0
        Console.WriteLine(list2.CompareTo(list1)); // 1
        Console.WriteLine(list2.CompareTo(list3)); // 1
        Console.WriteLine(list3.CompareTo(list1)); // 0
        Console.WriteLine(list3.CompareTo(list2)); // -1
        Dictionary<int, int> dict1 = new Dictionary<int, int> {
            [1] = 5,
            [2] = 4,
            [3] = 3,
            [4] = 2,
            [5] = 1
        };
        Dictionary<int, int> dict2 = new Dictionary<int, int> {
            [5] = 1,
            [4] = 2,
            [3] = 3,
            [2] = 4,
            [1] = 5
        };
        Dictionary<int, int> dict3 = new Dictionary<int, int> {
            [1] = 1,
            [2] = 2,
            [3] = 3,
            [4] = 4,
            [5] = 5
        };
        Console.WriteLine(dict1.CompareTo(dict2)); // -1
        Console.WriteLine(dict1.CompareTo(dict3)); // 1
        Console.WriteLine(dict2.CompareTo(dict1)); // 1
        Console.WriteLine(dict2.CompareTo(dict3)); // 1
        Console.WriteLine(dict3.CompareTo(dict1)); // -1
        Console.WriteLine(dict1.CompareTo(dict1)); // 0
        Console.WriteLine(dict2.CompareTo(dict2)); // 0
        Console.WriteLine(dict3.CompareTo(dict3)); // 0
    }
}

Желательно чтобы способ проверял и длину, чтобы (new List<int> { 1, 2, 3, 4, 5 }).CompareTo(new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }) давал -1.


Ответы (1 шт):

Автор решения: Irshat Khuzin

List и Dictionary<TKey, TValue> не реализуют интерфейс IComparable и поэтому не имеют метод CompareTo. Вам нужно написать свой собственный компаратор для массивов и словарей и использовать его для сравнения. В приведенном примере использование CompareTo невозможно.

→ Ссылка