泛型类,如何实现IComparable

时间:2017-04-23 07:52:57

标签: c# generics

任务:创建一个方法,该方法接收可以比较的任何类型的列表和给定类型的元素作为参数。该方法应返回大于给定元素值的元素数。修改Box类以支持按存储数据的值进行比较。 在第一行,您将收到n - 要添加到列表中的元素数。在接下来的n行中,您将收到实际元素。在最后一行,您将获得需要比较列表中每个元素的元素的值。

INPUT: 3 AA AAA BB

(givenElement是“aa”)

输出: 2

这是我的代码,我不知道如何比较它们......

public class Box<T> : IComparable<Box<T>>
{
    private T value;

    public Box(T value)
    {
        this.value = value;
    }

    public T Value
    {
        get
        {
            return this.value;
        }
        set
        {
            this.value = value;
        }
    }

    public int CompareTo(Box<T> other)
    {
        // ???
    }

    public override string ToString()
    {
        return string.Format($"{value.GetType().FullName}: {value}");
    }
}

    static void Main()
    {
        int n = int.Parse(Console.ReadLine());

        List<Box<string>> boxList = new List<Box<string>>();

        for (int i = 0; i < n; i++)
        {
            string input = Console.ReadLine();
            var box = new Box<string>(input);

            boxList.Add(box);              
        }

        string inp = Console.ReadLine();

        var elementComparer = new Box<string>(inp);


       GenericCountMethod(boxList, elementComparer);

    }
    public static int GenericCountMethod<T>(List<T> boxList, T str)
        where T : IComparable<T>
    {
        int count = 0;
        foreach (var item in boxList)
        {
            var x = item.CompareTo(str);
            // ??

        }
        return count;
    }

1 个答案:

答案 0 :(得分:1)

您可以将约束应用于类

public class Box<T> : IComparable<Box<T>> where T: IComparable<T>

然后使用CompareTo的{​​{1}}实现:

value