我可以使用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之外访问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);
}
答案 0 :(得分:2)
我不知道如何访问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();
}