2

プログラマーが選択できる値のリストを提供するクラスにプロパティを作成する必要があります。私は過去に列挙型を使用してこれを行いました。

Public Enum FileType
    Sales
    SalesOldType
End Enum

Public Property ServiceID() As enFileType
    Get
        Return m_enFileType
    End Get
    Set(ByVal value As enenFileType)
        m_enFileType = value
    End Set
End Property

問題は、SQL テーブルの値に基づいて、クラスの初期化で値のリストを設定したいということです。私が読んだことから、列挙型は基本的に定数であるため、オンザフライで作成することはできません。

おそらくリストまたは辞書型を使用して目標を達成できる方法はありますか? または、機能する可能性のあるその他の方法。

4

2 に答える 2

1

これがあなたの質問に答えるかどうかはわかりませんが、それはこの問題に関する私の意見です。私は列挙型が好きです。主な理由は、プログラマーである私にとって便利だからです。これは、コードを書いているときに、定数値に対して enum を使用すると、入力時にオートコンプリートされるだけでなく、有効な列挙値のみを指定できることを確認するコンパイル時のエラー チェックも行われるためです。ただし、あなたが言うように、コンパイル時に定義された定数があるため、列挙型は実行時に定義された値に対しては機能しません。

通常、例のように SQL テーブルからロードされる柔軟な値を使用する場合は、文字列値のみを使用します。したがって、SalesSalesOldTypeをテーブルに格納し、それらを の値として使用しますFileType。私は通常、整数ではなく文字列を使用します。これは、何かをデバッグしているときにデータ テーブルを見ている場合、文字列は人間が読める形式だからです。

ここで、少しハイブリッドを実行して、値を格納してテーブルから取得できるようにすることができますが、一般的に使用される値をコード内の定数として定義すると、次のようになります。

 Public Class FileTypeConstants
       public const Sales = "Sales"
       public const SalesOldType = "SalesOldType"
 End Class

こうすることで、共通の値でコーディングするときに、1 つの場所での小さな文字列のタイプミスがプログラムにバグを引き起こさないようにすることができます。

また、補足として、私はクリック 1 回の展開を介して社内に展開されるアプリケーションのコードを作成します。アップデート。したがって、データベース値と enum の使用の問題は、ユーザーへの更新をいかに簡単に入手できるかの 1 つになる可能性があります。めったに更新しない場合は、データベースの値がおそらく最適です。頻繁に更新し、更新がユーザーによって行われていない場合は、列挙型も同様に機能します。

それがあなたに役立つことを願っています!

于 2012-11-16T19:06:34.573 に答える
-1

コードがコンパイルされた後に値が変更されない場合、コードを単純に自動生成するのが最善の選択肢のように思えます。たとえば、次のような単純なアプリケーションを作成できます。

Public Shared Sub Main()
    Dim builder As New StringBuilder()
    builder.AppendLine("' Auto-generated code.  Don't touch!!  Any changes will be automatically overwritten.")
    builder.AppendLine("Public Enum FileType")
    For Each pair As KeyValuePair(Of String, Integer) In GetFileTypesFromDb()
        builder.AppendLine(String.Format("    {0} = {1}", pair.Key, pair.Value))
    End For
    builder.AppendLine("End Enum")
    File.WriteAllText("FileTypes.vb", builder.ToString())
End Sub

Public Function GetFileTypesFromDb() As Dictionary(Of String, Integer)
    '...
End Function

次に、そのアプリケーションをプロジェクトのビルド前のステップとして追加して、メイン アプリケーションをコンパイルするたびに自動的に実行されるようにします。

于 2012-11-19T13:46:05.020 に答える