|
|
連載:[完全版]究極のC#プログラミング
Chapter16 LINQとメソッド構文
川俣 晶
2010/03/29 |
|
|
16.8 orderbyの比較オブジェクト
さて、上記リスト16.9の例はメソッド構文を使うと、もう1つ別のスタイルに書き換えることができる。これは、クエリ式では記述できないがメソッド構文で記述できる事例の1つである。
上記のサンプルコードは、リスト16.10のように書き直すと、ThenByDescendingメソッドも複数のソート条件の記述も抜きで、同等条件の並べ替えを行うことができる。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
class Comparer : IComparer<int>
{
public int Compare(int x, int y)
{
int result = Math.Abs(x) - Math.Abs(y);
if (result == 0) return x - y;
return result;
}
}
static void Main(string[] args)
{
int[] array = { -2, -1, 0, 1, 2 };
var query = array.OrderByDescending((x) => x, new Comparer());
foreach (int n in query) Console.WriteLine(n);
}
}
|
|
リスト16.10 カスタム比較オブジェクトで比較する |
このコードのポイントは、OrderByDescendingメソッドの第2引数に指定された比較オブジェクトである。このような比較オブジェクトは、比較の条件が込み入ったとき、同じ条件を何回も比較のために使い回すときにあると便利な存在である。いたずらにクエリ式を長く書くよりも、このような比較オブジェクトを用意すればコードがスマートになることもあるだろう。そのようなスマートさを得るには、メソッド構文を使わなければならない。
Insider.NET 記事ランキング
本日
月間