用于部分排序的IComparable类型接口

时间:2012-03-25 17:30:42

标签: c# interface constraints

我试图定义一个泛型函数来给出一组参数的最大值。它是这样的:

    public static TResult Max<TResult>(params TResult[] items)
    {
        TResult result = items[0];
        foreach (var item in items)
        {
            if (item > result)
                result = item;
        }
        return result;
    }

这一切都很好,除了编辑器在&#34;项目&gt;上呱呱叫导致&#34;线。我需要的是一种约束TResult有一个&gt;运算符(或者也可以运行。)但是,我没有看到任何可用的界面来执行此操作。由于这是部分排序,这似乎是一项非常常见的任务。我在巨大的.NET文档中遗漏了什么吗?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

没有任何界面支持部分排序​​。您也不能在泛型中使用运算符。

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

你也可以只使用IComparableIComparer接口的一部分来说明“这更接近”并忽略其他2个值。

IComparable和 通过LINQ查询使用的IComparer<in T>。即见OrderBy