TryParse系メソッドを一行で

string型をint型にキャストする時なんかのTryParse系のメソッドは出力型の一時変数を用意して使う。
これが地味にめんどくさい。一行増えるのが面倒なんじゃい。一行で書けないのがめんどくさい。
そんな小さな不満を解消するために2通りの改善策を考えた。

1.string型に対する拡張メソッド定義
2.実行の成否<bool>と出力値<TValue>を保持するResultWithValue<TValue>型と、出力用delegateを定義

1.拡張メソッド

この方法で済むのならこれで。デメリットはキャスト先の型の数だけ拡張メソッドを定義しないとなんないこと。
さらにTryParseパターンはDictionary型にもTryGetValueメソッドとして使われていたりする。

2.ResultWithValue型とdelegate

まずはResultWithValue型の定義から

自分で定義したクラスでのTryParseは全てResultWithValue<TValue>型を返すメソッドにしても問題なし。
むしろ既存のライブラリもそうであってほしかった。
欲を言えばLinqのFirstOrDefaultメソッドよりもこれが返って来てほしいかった。
とはいえ、既に一時変数が必要なTryParseメソッドがあるのでそれをカバーするのが以下のdelegateとstaticなクラス。

既存ライブラリとの統一を考えるなら今まで通りTryParseを実装して、staticなメソッドにTryParseメソッドを突っ込んで使えば少しばかり楽になるんじゃなかろうかと思った次第。

About houzkin

Leave a comment

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)