我试图定义一个泛型函数来给出一组参数的最大值。它是这样的:
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文档中遗漏了什么吗?
答案 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)
没有任何界面支持部分排序。您也不能在泛型中使用运算符。
最常见的解决方案 - 传递比较器方法委托。
你也可以只使用IComparable
或IComparer
接口的一部分来说明“这更接近”并忽略其他2个值。
IComparable
和
通过LINQ查询使用的IComparer<in T>
。即见OrderBy。