0

こんにちは、.net のキャッシュを使用して、以下のコードをより効率的に実行したいと考えています。buttSubmit_Click()が呼び出されたときに辞書を再定義する必要がなく、代わりにキャッシュされたデータが使用されるように、キャッシュされた辞書の内容を取得するにはどうすればよいですか。

protected void buttSubmit_Click(object sender, EventArgs e)
{
    Dictionary<string, string> dict = new Dictionary<string, string>();
    dict.Add("rad1", "value1");
    dict.Add("rad2", "value2");
    dict.Add("rad3", "value3");
    dict.Add("rad4", "value4");

    string vValue;
    dict.TryGetValue(RadioButtonList.SelectedValue, out vValue);
    submitVote(vValue);
}
4

4 に答える 4

3

率直に言って、それが単純な場合はを使用したくswitchなるでしょうが、それが単純化されていると仮定すると、おそらくそれをフィールドにします (この場合は にしましたstaticが、それはあなた次第です):

private static readonly Dictionary<string, string> dict
      = new Dictionary<string, string> {
    {"rad1", "value1"},
    {"rad2", "value2"},
    {"rad3", "value3"},
    {"rad4", "value4"},
};

protected void buttSubmit_Click(object sender, EventArgs e)
{
    string value;
    if(dict.TryGetValue(RadioButtonList.SelectedValue, out value))
    {
        submitVote(value);
    }
}
于 2013-10-08T10:15:48.620 に答える
2

メソッドの外側でディクショナリをフィールドとして宣言し、入力します。

わかりました、拡大します。静的フィールドは他の回答に示されているため、インスタンス フィールドは次のとおりです。

protected Dictionary<string, string> dict = new Dictionary<string, string>();

public MyClass()
{
    dict.Add("rad1", "value1");
    dict.Add("rad2", "value2");
    dict.Add("rad3", "value3");
    dict.Add("rad4", "value4");
}

protected void buttSubmit_Click(object sender, EventArgs e)
{    
    string vValue;
    dict.TryGetValue(RadioButtonList.SelectedValue, out vValue);
    submitVote(vValue);
}

選択はユースケースによって異なります。どちらも良くない場合は、if/else ブロックを検討してください。

于 2013-10-08T10:13:17.957 に答える
0

プロジェクトに global.asax を追加し、辞書をグローバルな静的としてこれに追加することも解決策です。global.asax を使用したこのソリューションには、すべてのユーザーとリクエストに対して永続的であるという (欠点) 利点があります。他のソリューションでは、リクエストごとにディクショナリが新しく作成されます。最初に、Web プロジェクトに global.asax を作成する必要があります (まだ配置されていない場合)。

ここに画像の説明を入力 グローバル アサックス 2

次に、global.asax.cs ファイルを編集して、dict を追加する必要があります。

public class Global : System.Web.HttpApplication
{

    public static readonly Dictionary<string, string> TEST_DICT
              = new Dictionary<string, string> {
            {"rad1", "value1"},
            {"rad2", "value2"},
            {"rad3", "value3"},
            {"rad4", "value4"},
        };

}

この辞書にアクセスしたい場合は、Global.TEST_DICT を呼び出します。

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Label_TESTDICT.Text = "";
        List<String> keys = Global.TEST_DICT.Keys.ToList();
        foreach (String key in keys)
        {
            Label_TESTDICT.Text += key + ":" + Global.TEST_DICT[key] + "<br>"; 
        }
    }
}
于 2013-10-09T09:37:28.743 に答える