@ledsun blog

無味の味は佳境に入らざればすなわち知れず

C#3.0のLINQと拡張メソッドでリファクタリング

リファクタリングしたらC#3.0、特にLINQと拡張メソッドが素晴らしいことを実感しました。例示します。

元コード

C#2.0で書きました。

リファクタリング

C#3.0です。大きい変更点は

  1. ループをLIQNとstring.Joinに置き換え
  2. インスタンスメソッドを拡張メソッドに変更

LINQの素晴らしい点はコードが仕様を表現できるところです。コメントが要らないぐらいです。
foreachでは変更したものをIEnumerableで返せません。そこで次の二択を迫られます。

  1. string.Joinを使うために新しくListを作り直して変更した文字列を詰めなおす
  2. 最初の一回は結合文字つけないけど、二個目からはつけるお決まり処理を書く

ListであればForEachメソッドが使えますがXxxCollectionでは使えません。LINQならIEnumerableなら何でも処理できます。

使用側の変化

標準クラスが使えます。


Dictionaryは継承できるので問題ありません。stringなどsealされていて継承できない場合影響大。自作クラスのフィールドで持つ必要があり、そのままではstringとして使えません。stringっぽく使うには自作クラスに処理を書く必要があります

  1. 引数に渡すには文字列への暗黙変換
  2. stringのメソッドを使うには委譲メソッド
  3. シリアライズ用の独自処理

参考資料

拡張メソッドの文法は簡単なので C# 3.0 の新機能 (C# によるプログラミング入門) 見ればわかります。
LINQはメソッドがたくさんあり覚えるのが大変。本で使い方を一通り見るとよいです。

よいコードを!