Pro LINQ:C#2008の統合言語クエリによると、 OrderBy演算子のプロトタイプは
public static IOrderedEnumerable<T> OrderBy<T, K>(
this IEnumerable<T> source,
Func<T, K> keySelector)
where
K : IComparable<K>
しかし、MSDNのドキュメントには、 TKeyに関するジェネリックスの制約がありません。IComparable<TKey>
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector
)
私は基本的に在庫をユニットで、次にサイズでソートしています。
var sortedInventories = inventories
.OrderBy(inventory => inventory.Unit)
.OrderBy(inventory => inventory.Size);
上記のコードスニペットから、ラムダ式は単にインベントリプロパティを返し、並べ替えます。を返す式のようには見えませんIComparer<T>
しかし、ロジックによれば、ラムダ式はタイプである必要があるように見えますIComparer<T>
。
どちらが正しい宣言OrderBy
ですか?
(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; }
}