实施通用Max方法时出错

时间:2018-09-01 02:29:43

标签: c#

我正在实现一种通用方法来从类似列表的列表中获取最大值,

public class Program
{
    static void Main(string[] args)
    {

        List<object> list = new List<object>();
        list.Add(1);
        list.Add(2);
        list.Add(3);
        Program p = new Program();
        p.Max(list);
    }

    public T Max<T>(List<T> values) where T : IComparable<T>
    {
        T max = values[0];
        for (int i = 1; i < values.Count; i++)
            if (values[i].CompareTo(max) > 0)
                max = values[i];
        return max;
    }
}

调用Max方法时出现错误:

  

类型'object'不能用作通用类型或方法'Program.Max(List)'中的类型参数'T'。没有从'object'到'System.IComparable'的隐式引用转换。 / p>

困惑!!!

有帮助吗?

1 个答案:

答案 0 :(得分:2)

您在T参数中有一个通用约束,该约束说T必须实现IComparable<T>,并且您将object作为通用类型参数传递,该类型会自动推断因为您有一个List<object>,所以p.Max(list)等效于p.Max<object>(list)

但是object类未实现IComparable<T>,因此会出现错误。

您可以将类型更改为int来实现IComparable<T>

var list = new List<int>();