我试图通过使用以下方法返回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;
}
}
答案 0 :(得分:3)
你的问题在这里:
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;
}
}
你刚刚覆盖了类声明中定义的T.应该是:
{{1}}
答案 1 :(得分:2)
方法T
中的Max<T>
不是您班级GenericList<T>
中定义的Max
,即使它们具有相同的名称。我认为你应该将约束移到类中,并使internal class GenericList<T> where T : IComparable
{
//....
public T Max()
{
//....
}
}
方法非泛型。
int main()
{
switch(1,2)
{
case 1:printf("1");break;
case 2:printf("2");break;
default: printf("error");break;
}
}
答案 2 :(得分:0)
其他答案可以解决您的问题,但为什么在T已实施IComparable时使用Comparer<T>.Default
?
if (item.CompareTo(max) > 0)
{
max = item;
}