我正在实现一种通用方法来从类似列表的列表中获取最大值,
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>
困惑!!!
有帮助吗?
答案 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>();