投稿者 魔界の仮面弁士  (社会人) 投稿日時 2015/12/24 17:32:42
> Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
>    Dim ct = New Table
Button1_Click 内で、Dictionary を毎回 New するのは得策ではありません。

New Dictionary するのは、変換表一つにつき一度だけにし、
アプリケーション内では同じインスタンスを使いまわす方が良いでしょう。


> Dim matchedValue As String = If(ct.dic.FirstOrDefault(Function(k) k.Key = text).Value, "")

FirstOrDefault を使うのは、データ件数が多い場合に不利になります。
ContainsKey を使うほうがお奨めです。
Dim matchedValue As String = If(dic.ContainsKey(text), dic(text), "")

YuO さんが紹介された、TryGetValue を用いる手もありますね。


> データベースもしくはリソースファイルあたりでしょうか。
App.config で設定する例を紹介しておきます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="変換辞書">
      <section name="単位" type="System.Configuration.DictionarySectionHandler" />
    </sectionGroup>
  </configSections>
  <変換辞書>
    <単位>
      <add key="ナノメートル" value="㎚" />
      <add key="ミリメートル" value="㎜" />
      <add key="センチメートル" value="㎝" />
      <add key="平方センチメートル" value="㎠" />
      <add key="平方メートル" value="㎡" />
      <add key="平方キロメートル" value="㎢" />
      <add key="立方ミリメートル" value="㎣" />
      <add key="立方キロメートル" value="㎦" />
      <add key="バール" value="㍴" />
      <add key="ミリバール" value="㏔" />
      <add key="ヘクトパスカル" value="㍱" />
      <add key="キロバイト" value="㎅" />
      <add key="メガバイト" value="㎆" />
      <add key="ギガバイト" value="㎇" />
      <add key="カロリー" value="㎈" />
      <add key="キロカロリー" value="㎉" />
    </単位>
  </変換辞書>
</configuration>


上記を Dictionary として利用するためのコードはこんな感じ。
参照設定に System.Configuration.DLL を指定しておいて下さい。

※要VB2008以降

Public Shared Function 単位変換表のロード() As Dictionary(Of StringString)
    Return ReadDictionary("変換辞書/単位")
End Function

Public Shared Function ReadDictionary(sectionName As StringAs Dictionary(Of StringString)
    Return DirectCast(System.Configuration.ConfigurationManager.GetSection(sectionName), System.Collections.Hashtable).Cast(Of System.Collections.DictionaryEntry).ToDictionary(Function(x) x.Key.ToString(), Function(x) x.Value.ToString())
End Function