C# Pro LINQ手册中的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

根据,OrderBy操作符的原型是

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);