用于部分排序的IComparable类型接口
本文关键字:类型 接口 IComparable 排序 用于部 | 更新日期: 2023-09-27 18:29:02
我正在尝试定义一个泛型函数,以给出一组参数的最大值。它是这样的:
public static TResult Max<TResult>(params TResult[] items)
{
TResult result = items[0];
foreach (var item in items)
{
if (item > result)
result = item;
}
return result;
}
这一切都很好,只是编译器在"item>result"行发出沙哑的声音。我需要的是一种将TResult约束为具有>运算符的方法(或者<也可以。)然而,我看不到任何现成的接口可以做到这一点。由于这是部分排序,所以这似乎是一项非常常见的任务。我是不是在庞大的.NET文档中遗漏了什么?
您可以使用IComparable
:
public static IComparable Max<TResult>(params IComparable[] items)
{
IComparable result = items[0];
foreach (var item in items)
{
if (item.CompareTo(result) > 0)
result = item;
}
return result;
}
没有一个接口只支持部分排序。不能在泛型中也使用运算符。
最常见的解决方案-传递比较器方法委托。
您也可以只使用IComparable
或IComparer
整数的一部分,上面写着"这比那更重要",而忽略其他两个值。
IComparable
和通过LINQ查询使用的CCD_ 5。也就是说,请参阅OrderBy。