用于部分排序的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类型接口

您可以使用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;
}

没有一个接口只支持部分排序。不能在泛型中也使用运算符。

最常见的解决方案-传递比较器方法委托。

您也可以只使用IComparableIComparer整数的一部分,上面写着"这比那更重要",而忽略其他两个值。

IComparable和通过LINQ查询使用的CCD_ 5。也就是说,请参阅OrderBy。