1

複数のフォールスルー状況でswitchステートメントのコンテンツを基本的に保存するために使用するのに適したコレクション/コンテナーは何ですか?より正確な方法は、「多くのキーと1つの値」のルックアップに適したC#ソリューションは何でしょうか。System.Collections名前空間とそれに関連する名前空間を確認しましたが、many-keys-one-valueに特に役立つものは見つかりませんでした。

最近、手動で作成するときに発生するエラーを回避するために、Webアプリケーションに必要なXMLファイルを作成して検証するための小さなコンソールプログラムを自分で作成しました。しかし、初期バージョンでは、わずかに変更可能ないくつかの要素をハードコーディングしました。具体的には、検証用のいくつかの辞書と、大量のフォールスルーオプションを備えた1つの大きなswitchステートメントです。これは今後数か月間は機能しますが、最終的にこれらのハードコードされた要素を更新する必要がある場合があります。これには、現在ソースファイルの編集が必要です。これを回避するために、辞書とswitchステートメントの情報をXMLファイルに保存することにしました(最終的には、ひどく再帰的な傾向で、それらを構築して検証するプログラムを作成するようになりました。私のためのXMLファイル)。さて、これをファイルに保存する際に、データを取得するときに、辞書のようにswitchステートメントを単純に再構築することはできません。したがって、switchステートメントの効果をシミュレートする必要があります。つまり、基本的に、同じ「値」を参照するには複数の「キー」が必要です。


switchステートメントのスニペットの例。このメソッドは、主に値を記憶しようとする人間のメモリスペースを節約するために、特別な値の入力を対応するIDに変換します。基本的に図のように、すべてが単一の値を出力するいくつかのキーをコンテナーに格納したいと思います。

    private static string DiscernRegistrationId(string str)
{
    string retVal = str;
    switch (str.ToLowerKey()) //shortcut extension for str.Replace(" ","").Replace(".","").ToLowerInvariant()
    {
        case "computerpackage":
        case "comppackage":
        case "cpackage":
        case "computerpkg":
        case "comppkg":
        case "cpkg":
            retVal = "0x0100C73692D109C741A1B8846141B47519C8";
            break;
        case "mobilepackage":
        case "mobpackage":
        case "mpackage":
        case "mobilepkg":
        case "mobpkg":
        case "mpkg":
            retVal = "0x010081F753F0A4A5412CB6A8E9F8CD193F58";
            break;
        //More cases follow
    }
    return retVal;
}
4

2 に答える 2

3

私は通常のケースを使用Dictionary<string, string>し、すべてのフォールスルーケースを同じstringオブジェクトにポイントします。

于 2010-05-27T13:35:00.827 に答える
1

IDictionary<>最善の選択肢は、組み込みクラスの1つに固執し、値を複製することだと思います。SortedDictionary<>この場合、キー順にアイテムを格納するので、実際にお勧めします。これは、switchステートメントと同じ視覚的外観を与える方法でキーを印刷する必要がある場合に役立ちます。

値は参照型である文字列であるため、値を複数回格納することは問題にはなりません。もちろん、同じ文字列への参照は重複していますが、文字列全体の内容などを複製しているわけではありません。

もう1つ指摘すべきことは、コンパイラが実際にそのswitchステートメントをバックグラウンドでハッシュテーブルに変換していると私が信じていることです。つまり、おそらく私が推奨したのと同じ戦略を使用しているということです。分解して見てください。

于 2010-05-27T13:41:02.890 に答える