-1

foreach を使用して Dictionary の値をループできます。ただし、foreach の外部で Dictionary にアクセスする方法がわかりません。
コード:

Dictionary<string, dynamic> frmControlProp =
    new Dictionary<string, dynamic>();

public void setFrmControlTagProperties(string n, string tagVal)
{
    var dict = tagVal.Split('|')
        .Select(x => x.Split(':'))
        .Where(x => x.Length > 1 && !String.IsNullOrEmpty(x[0].Trim())
         && !String.IsNullOrEmpty(x[1].Trim()))
        .ToDictionary(x => x[0].Trim(), x => x[1].Trim());

    string en = dict["encrypt"];
    string sn = dict["settingName"];

    var conTag = new { Encrypt = en, SettingName = sn };

    frmControlProp.Add(n, new object());
    frmControlProp[n] = conTag;
}

foreach は期待どおりに動作します。

    foreach (var area in frmControlProp.Keys.ToArray())
    {
        var areaname = frmControlProp[area].Encrypt;
        //MessageBox.Show(areaname.ToString());
    }

foreach の外でディクショナリにアクセスする方法がわからない:

public void textBox_LostFocus(object sender, EventArgs e)
{
    var c = (Control)sender;
    string cn = c.Name;

    //var cd = frmControlProp[cn];

    //MessageBox.Show(frmControlProp.Keys.ToArray()..ToString());
}

編集
このコードは期待どおりに機能しました:

public void textBox_LostFocus(object sender, EventArgs e)
{
    var c = (Control)sender;
    string cn = c.Name.ToString();

    MessageBox.Show(frmControlProp[cn].Encrypt);
}
4

1 に答える 1