【问题标题】:how do I access an object within a Dictionary?如何访问字典中的对象?
【发布时间】:2013-08-16 14:50:36
【问题描述】:

我可以使用 foreach 遍历 Dictionary 的值。但是,我不知道如何在 foreach 之外访问字典。
代码:

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

【问题讨论】:

标签: c# object dictionary


【解决方案1】:

我不知道如何在 foreach 之外访问字典。

这里是你自己做的

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

}

【讨论】:

  • 我相信我能够访问 FrmControlProp 而无需创建公共属性然后按照您的建议进行分配...var cd = frmControlProp[cn].ToString(); MessageBox.Show(cn)// as a test 产生 { Encrypt = true, SettingName = LogEmailTo }。我假设我必须将其转换为数组。我试过var cd = frmControlProp[cn].ToArray(),但是MessageBox 没有显示。
  • ` public void textBox_LostFocus(object sender, EventArgs e) { var c = (Control)sender;字符串 cn = c.Name.ToString(); MessageBox.Show(frmControlProp[cn].Encrypt); }' 该代码按预期工作。我以为我必须将其转换为数组才能访问对象值。
  • 我没有得到你的问题。你能详细说明一下吗?
  • 最初我不确定如何从字典中访问对象。我想,必须将 Dictionary 转换为数组(.ToArray()),这样我才能访问该对象,但我错了。 frmControlProp[cn].Encrypt 成功了。
猜你喜欢
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 2021-06-06
  • 1970-01-01
  • 2021-08-12
  • 2022-01-06
相关资源
最近更新 更多