0

我正在尝试使用以下方法返回 T[] 数组的最大值。我不明白为什么编译器在这里抱怨T max = _genericList[0];会抛出错误cannot implicitly convert ...\GenericList(9) to ...\GenericList(123)

为什么这两个不同?我想使用一些 GenericList 类的 T[] 来插入它并找到最大值/最小值。这怎么可能?

internal class GenericList<T>
{
    private T[] _genericList;
    private int _count;
    private int _listInnitialLength;

public GenericList(int listLength)
    {
        _genericList = new T[listLength];
        _count = 0;
        _listInnitialLength = listLength;
    }

    public T Max<T>() where T : IComparable
    {
        T max = _genericList[0];
        foreach (T item in _genericList)
        {
                if (Comparer<T>.Default.Compare(item, max) > 0)
                {
                    max = item;
                }
        }
        return max;
    }
}
4

3 回答 3

3

你的问题在这里:

public T Max<T>() where T : IComparable

您刚刚覆盖了类声明中定义的 T 。应该:

internal class GenericList<T>  where T : IComparable
{
    private T[] _genericList;
    private int _count;
    private int _listInnitialLength;

    public GenericList(int listLength)
    {
        _genericList = new T[listLength];
        _count = 0;
        _listInnitialLength = listLength;
    }

    public T Max()
    {
        T max = _genericList[0];
        foreach (T item in _genericList)
        {
            if (Comparer<T>.Default.Compare(item, max) > 0)
            {
                max = item;
            }
        }
        return max;
    }
}
于 2016-06-13T07:32:13.680 回答
2

T的 in 方法Max<T>不是您的类中定义的方法GenericList<T>,即使它们具有相同的名称。我认为您应该将约束移至类并使Max方法非泛型。

internal class GenericList<T> where T : IComparable
{
    //....
    public T Max()
    {
        //....
    }
}
于 2016-06-13T07:32:01.807 回答
0

其他答案将解决您的问题,但是为什么Comparer<T>.Default在 T 已经实现IComparable时使用?

if (item.CompareTo(max) > 0)
{
    max = item;
}
于 2016-06-13T13:02:49.043 回答