C# 当内容包含字典和类时,如何在字典中设置值

C# 当内容包含字典和类时,如何在字典中设置值,c#,winforms,dictionary,C#,Winforms,Dictionary,我在下面定义了变量: Dictionary<clssMenu_Item, Dictionary<clssMenu_Item, List<clssMenu_Item>>> dicMenu = new Dictionary<clssMenu_Item, Dictionary<clssMenu_Item, List<clssMenu_Item>>>(); 我有一个字符串(我调用strKey)已经分配给clssMe

我在下面定义了变量:

Dictionary<clssMenu_Item, Dictionary<clssMenu_Item, List<clssMenu_Item>>> dicMenu =
        new Dictionary<clssMenu_Item, Dictionary<clssMenu_Item, List<clssMenu_Item>>>();
我有一个字符串(我调用
strKey
)已经分配给
clssMenu\u项目
dicmmenu
text
属性。很明显,
文本
的一部分。我想搜索
dicMenu
,在字典的所有地方,比如它的子目录中,找到
strKey
value
。我不知道怎么能得到这个值

此方法计算字典的

private  List<clssMenu_Item> GetFormButtons(Form form)
{
    List<clssMenu_Item> ListBtn = new List<clssMenu_Item>();
    foreach (Control c in GetAllControls<Button>(form))
    {
        int btnIndex= c.Name.IndexOf("btn");
        if (btnIndex != 0) // find all of the determined buttons
        {
            clssMenu_Item objBtn = new clssMenu_Item();
            objBtn.name = c.Name.ToString();
            objBtn.text = c.Text;

            ListBtn.Add(objBtn);
        }
    }
    return ListBtn;   
}
我使用嵌套字典的原因是该树只有3个级别。每个
clssMenu\u项
s都有一组与自身类似的子项
type
<代码>字典
是我保存它们的解决方案

问题: 现在我想用下面的代码填充键的值:

Dictionary<clssMenu_Item, List<clssMenu_Item>> d2 = new Dictionary<clssMenu_Item, List<clssMenu_Item>>();
    clssMenu_Item k = new clssMenu_Item();
    k.text = strKey;
    foreach(var prp in dicMenu.Keys) //we should fill all of the variables in class
    {
        if (prp.text == strKey)
        { k.name = prp.name; break; }
    }
    d2= dicMenu[k]; //assign value of key
Dictionary d2=新字典();
clssMenu_项k=新的clssMenu_项();
k、 text=strKey;
foreach(dicMenu.Keys中的var prp)//我们应该填充类中的所有变量
{
if(prp.text==strKey)
{k.name=prp.name;break;}
}
d2=双菜单[k]//分配键的值
我不知道为什么我在
d2=dicmunu[k]上出错
k
不在
DicMenu
中,尽管我调试了这个块。我们在菜单中有
k
:(我不知道该怎么办?!
有没有其他方法可以创建一棵树?

如果我理解了,我肯定会帮上忙:)请理解我,我真的很难解释更多。因为
菜单
很复杂。请逐字重读一遍,然后让我知道哪个部分需要更多信息。谢谢你,你当前的字典声明有两个问题,这将阻止你得到你想要的东西#1) dicMenu的键是clssMenu_项对象。这意味着您只能使用相同的键对象查找该词典。clssMenu_项名称和文本成员的值将不相关。你必须为那个类重新定义Equals。即使这样做,也会遇到问题#2)在对象上设置关键帧,但只想使用该对象的单个成员进行查找将导致悲伤。我会重新考虑你如何声明你的字典,以匹配你希望访问它的方式加上我之前的评论…除非你只想枚举和测试字典的每个元素。为什么不使用一个简单的字典,以text属性作为键,以class作为值呢<代码>字典菜单=新建字典()什么要求促使您使用(或相信您需要使用)嵌套字典?
foreach (var k in objH.mainForm) //fill dicMenu
{
    dicMenu.Add(k,null);
}
Dictionary<clssMenu_Item, List<clssMenu_Item>> d2 = new Dictionary<clssMenu_Item, List<clssMenu_Item>>();
    clssMenu_Item k = new clssMenu_Item();
    k.text = strKey;
    foreach(var prp in dicMenu.Keys) //we should fill all of the variables in class
    {
        if (prp.text == strKey)
        { k.name = prp.name; break; }
    }
    d2= dicMenu[k]; //assign value of key