投稿者 YUU  (社会人) 投稿日時 2015/12/22 12:47:51
現在、指定の文字列のみ変換したい対象の文字列として変換し、出力するといったPGを作成しております。

過去、IFによる分岐やSelect Caseのような条件分岐を多用してきましたが読みにくく、かつ条件が増えれば増えるほど保守の観点からも大変です。

以前、お伺いした西暦から和暦への変換時にいただいた返信の中に変換表を利用した手法を提示していただいてからいろいろ試しております。
現在のコード↓

        Dim dic As Dictionary(Of Regex, String) = New Dictionary(Of Regex, String)() From {
                                {New Regex("山田"), "太郎"}, {New Regex("田中"), "太郎"},
                                {New Regex("佐藤"), "太郎"}, {New Regex("藤井"), "太郎"}}

        '変換表から、条件に合致する値のペアを取得する
        Dim text As String = "佐々木"
        Dim matchedValue As String = If(dic.FirstOrDefault(Function(item) item.Key.Match(text).Success).Value, "")

        Console.WriteLine("一致した値= {0}", matchedValue) '今回はマッチさせず。

上記の手法でもうまくいっているのですが、コード内に変換表が散らばりあまり見栄えとしてはよくありません。
変換表が多い、少ないの問題もあるのですが一部変換対象が異なる等でもDictionaryを新たに作成しているため見栄えが悪いです。

汎用的な手法があるのかわかりませんが、他になにか手法がございますでしょうか。