C# 使用比较的泛型

C# 使用比较的泛型,c#,.net,generics,C#,.net,Generics,我在C#中有一个类,我想在其中实现在泛型数组中执行操作的方法。例如,我想从通用数组中获取最大组件值。在我的例子中,只考虑数字类型(int,长,双…)就足够了。 公共类数值计算,其中T:i可比较 { 公共静态T getMax(T[]数组) { T最大值=默认值(T); 如果(数组长度>0){ maxValue=数组[0]; for(int i=0;imaxValue) { 最大值=数组[i]; } } } 返回最大值; } } 但这会返回错误: “错误2运算符'>'不能应

我在C#中有一个类,我想在其中实现在泛型数组中执行操作的方法。例如,我想从通用数组中获取最大组件值。在我的例子中,只考虑数字类型(int,长,双…)

就足够了。
公共类数值计算,其中T:i可比较
{
公共静态T getMax(T[]数组)
{
T最大值=默认值(T);
如果(数组长度>0){
maxValue=数组[0];
for(int i=0;imaxValue)
{
最大值=数组[i];
}
}            
}
返回最大值;
}
}
但这会返回错误: “错误2运算符'>'不能应用于'T'和'T'类型的操作数”

是否有我跳过的接口或其他什么?可以对数字的泛型数组执行此泛型方法吗


谢谢大家!

使用下一个代码比较泛型类型的对象<代码>比较到在
i可比较
界面中定义

if (array[i].CompareTo(maxValue) > 0)
{
    maxValue = array[i];
}

听起来你只是想:

return array.DefaultIfEmpty().Max();
但要回答您的特定问题,您可以使用,它是
IComparable
接口的一个成员,您已将数组元素类型限制为:

if(array[i].CompareTo(maxValue) > 0) { ... }
但就我个人而言,我会使用,因为它更好地处理
null
引用。这在您的案例中并不重要,因为您只对基本数值类型(所有结构)感兴趣:

if(Comparer.Default.Compare(array[i],maxValue)>0){…}
使用
CompareTo()
代替comparison操作符。 此外,Max已通过Linq实现:

return new[] {1,2,9,4,45}.Max();

这是C#的一个已知缺点;这是一个经常被要求的功能,能够将泛型约束到提供特定运算符的类型。谢谢!我将使用Comparer.Default。
if(Comparer<T>.Default.Compare(array[i], maxValue) > 0) { ... }
return new[] {1,2,9,4,45}.Max();