如何访问字典中的对象

本文关键字:字典 对象 访问 何访问 | 更新日期: 2023-09-27 18:27:54

我可以使用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之外访问Dictionary:

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);
}

如何访问字典中的对象

我不知道如何访问foreach外部的Dictionary。

你自己在这里做

string en = dict["encrypt"];

但是,我认为你的问题是你无法在其他地方访问它。如果你无法在某个地方访问它,那么你需要将它分配给某个可以通过表单访问的变量。正如我所看到的,你正试图从表单frmControlProp访问它。因此,在函数setFrmControlTagProperties中,您需要为表单分配字典。

首先,创建一个获取Dictionary的公共属性。然后像这个一样分配

frmControlProp.Dict = dict;

然后你可以像这个一样得到它

public void textBox_LostFocus(object sender, EventArgs e)
{
    var c = (Control)sender;
    string cn = c.Name;
    //read the values here
    var cd = frmControlProp.Dict.Keys.ToArray();
}