【发布时间】:2010-12-07 18:36:04
【问题描述】:
我有以下示例代码(仅用于 C# 3.5 学习目的!)。
我正在调用接受 IEnumerable 和排序函数的排序函数。如果我使用 lambda 表达式(案例 A)调用它,编译器可以派生返回类型 TResult,但是当我传递 func SortInt(案例 B)时,编译器会抛出错误!
我无法理解为什么编译器无法在第二种情况下派生 TResult !我似乎传递了完全相同的信息。或者这不准确?
请帮忙!
int[] intArray = { 1, 3, 2, 5, 1 };
IEnumerable<int> intArray2 = Sort(intArray, x => SortInt(x)); // <= CASE A - OK !
IEnumerable<int> nextIntArray = Sort(intArray, SortInt); // <= CASE B - Compile Error: Cannot Infer Type !
public static IEnumerable<TResult> Sort<T, TResult>(IEnumerable<T> toBeSorted,
Func<IEnumerable<T>, IEnumerable<TResult>> sortFunc)
{
return sortFunc(toBeSorted);
}
public static IEnumerable<int> SortInt(IEnumerable<int> array)
{
return array.OrderByDescending(x => x);
}
【问题讨论】:
-
你的名字像印度人一样是印度人