リファクタリングしたらC#3.0、特にLINQと拡張メソッドが素晴らしいことを実感しました。例示します。
元コード
C#2.0で書きました。
リファクタリング後
C#3.0です。大きい変更点は
- ループをLIQNとstring.Joinに置き換え
- インスタンスメソッドを拡張メソッドに変更
LINQの素晴らしい点はコードが仕様を表現できるところです。コメントが要らないぐらいです。
foreachでは変更したものをIEnumerable
- string.Joinを使うために新しくListを作り直して変更した文字列を詰めなおす
- 最初の一回は結合文字つけないけど、二個目からはつけるお決まり処理を書く
ListであればForEachメソッドが使えますがXxxCollectionでは使えません。LINQならIEnumerableなら何でも処理できます。
使用側の変化
標準クラスが使えます。
Dictionaryは継承できるので問題ありません。stringなどsealされていて継承できない場合影響大。自作クラスのフィールドで持つ必要があり、そのままではstringとして使えません。stringっぽく使うには自作クラスに処理を書く必要があります
- 引数に渡すには文字列への暗黙変換
- stringのメソッドを使うには委譲メソッド
- シリアライズ用の独自処理
参考資料
拡張メソッドの文法は簡単なので C# 3.0 の新機能 (C# によるプログラミング入門) 見ればわかります。
LINQはメソッドがたくさんあり覚えるのが大変。本で使い方を一通り見るとよいです。
よいコードを!