C# Pro LINQ手册中的OrderBy签名错误?
根据,OrderBy操作符的原型是C# Pro LINQ手册中的OrderBy签名错误?,c#,.net,linq,errata,C#,.net,Linq,Errata,根据,OrderBy操作符的原型是 public static IOrderedEnumerable<T> OrderBy<T, K>( this IEnumerable<T> source, Func<T, K> keySelector) where K : IComparable<K> 从上面的代码片段中,lambda表达式只返回要排序的清单属性。它看起来不像是返回IComparer 但根据逻辑,lambd
public static IOrderedEnumerable<T> OrderBy<T, K>(
this IEnumerable<T> source,
Func<T, K> keySelector)
where
K : IComparable<K>
从上面的代码片段中,lambda表达式只返回要排序的清单属性。它看起来不像是返回IComparer
但根据逻辑,lambda表达式的类型应该是IComparer
哪一个是订单方的正确声明?(Apress.com没有相关信息)
下面是我创建的一个示例应用程序,用于测试OrderBy
public class Program
{
public static void Main(string[] args)
{
var inventories = new[] {
new Inventory { Unit = 1, Size = 2 },
new Inventory { Unit = 2, Size = 4 },
new Inventory { Unit = 3, Size = 6 },
};
var sortedInventories = inventories
.OrderBy(inventory => inventory.Unit)
.OrderBy(inventory => inventory.Size);
foreach (var inventory in sortedInventories)
Console.WriteLine("Unit: {0}; Size = {1}", inventory.Unit, inventory.Size);
}
}
public class Inventory
{
public int Unit { get; set; }
public double Size { get; set; }
}
将第二个“OrderBy”更改为“ThenBy”。你现在什么都要用,所以它是按大小和单位来计算的,但效率很低。我不确定你认为IComparer
应该放在哪里,除非你把它指定为另一个参数。基本上,它使用比较器。默认值
,除非指定单独的比较器
无论如何,您的查询应该是:
var sortedInventories = inventories
.OrderBy(inventory => inventory.Unit)
.ThenBy(inventory => inventory.Size);
(对于您的测试数据,您无法区分两者之间的差异,因为在每种情况下,Size=Unit*2
。请尝试使用一个单位小、尺寸大的项目。)
是的,看起来这本书的签名有点错误——可能是因为它在发行前不久发生了变化。如果您基本上担心得到错误的结果,以上就是解释。将第二个“OrderBy”更改为“ThenBy”。你现在什么都要用,所以它是按大小和单位来计算的,但效率很低。我不确定你认为IComparer
应该放在哪里,除非你把它指定为另一个参数。基本上,它使用比较器。默认值
,除非指定单独的比较器
无论如何,您的查询应该是:
var sortedInventories = inventories
.OrderBy(inventory => inventory.Unit)
.ThenBy(inventory => inventory.Size);
(对于您的测试数据,您无法区分两者之间的差异,因为在每种情况下,Size=Unit*2
。请尝试使用一个单位小、尺寸大的项目。)
是的,看起来这本书的签名有点错误——可能是因为它在发行前不久发生了变化。如果你基本上担心得到错误的结果,以上就是解释。本书下一节将讨论“ThenBy”。。。顺便问一下,这是否意味着“OrderBy”(在问题中提到)的原型不正确,我会假设MSDN文档是最新的签名?是的,通常使用MSDN-他们通常至少得到正确的签名。称我们为疯子,但我只使用intellisense/object browser/show definition-没有什么错。尽管MSDN当然是从代码生成的(+Sandcastle?@Jon:Ouch),但当我改变测试数据时,我能够看到“ThenBy”的用法,这本书的下一节将讨论“ThenBy”。。。顺便问一下,这是否意味着“OrderBy”(在问题中提到)的原型不正确,我会假设MSDN文档是最新的签名?是的,通常使用MSDN-他们通常至少得到正确的签名。称我们为疯子,但我只使用intellisense/object browser/show definition-没有什么错。尽管MSDN当然是由代码生成的(+Sandcastle?@Jon:Ouch),但当我改变测试数据时,我能够看到“ThenBy”的用法
var sortedInventories = inventories
.OrderBy(inventory => inventory.Unit)
.ThenBy(inventory => inventory.Size);