首页新闻找找看学习计划

关于List<T>的问题

0
[已解决问题] 解决于 2018-07-30 08:52
我有一个List<MenuLists>
public class MenuLists { public string Name { get; set; } public string Ico { get; set; } public string _href { get; set; } public List<MenuList> ChildMenu { get; set; } }  
List<MenuList> 如下 

public partial class MenuList
{
  public int Id { get; set; }
  public string Name { get; set; }
  public string HeaderIco { get; set; }
  public string C_href { get; set; }
  public string ParentName { get; set; }
  public string Jurisdiction { get; set; }
}

当我往MenuLists里添加数据时

如果我的MenuList改变,前面添加的MenuLists里的MenuList也会跟着变

这个是添加完数据的MenuLists

然后我执行了MenuList.Clear()

前面已经添加到MenuLists里的MenuList的数据也跟着清空了,请问是什么原因?要如何让已经添加的不会变?


 

问题补充:

这是代码

 public List<MenuLists> GetMenu(List<string> Jurisdiction)
        {
            List<MenuList> menu_list_parent = db.MenuList.ToList();
            List<MenuLists> menu_list = new List<MenuLists>();
            List<MenuList> child_menu_list = new List<MenuList>();

            for (int i = 0; i < Jurisdiction.Count; i++)
            {
                for (int n = menu_list_parent.Count - 1; n >= 0; n--)
                {
                    if (Jurisdiction[i] == menu_list_parent[n].Jurisdiction)
                    {
                        if (menu_list_parent[n].ParentName == "Parent")
                        {
                            for (int j = 0; j < menu_list_parent.Count; j++)
                            {
                                if (menu_list_parent[j].ParentName == menu_list_parent[n].Name)
                                {
                                    child_menu_list.Add(menu_list_parent[j]);
                                }
                            }
                            menu_list.Add(new MenuLists
                            {
                                Name = menu_list_parent[n].Name,
                                Ico = menu_list_parent[n].HeaderIco,
                                _href = menu_list_parent[n].C_href,
                                ChildMenu = child_menu_list
                            });

                        
                        }
                        continue;
                    }
                }
            }
            child_menu_list.Clear();
            

            return menu_list;
        }
bgh的主页 bgh | 初学一级 | 园豆:28
提问于:2018-07-27 17:44
< >
分享
最佳答案
0

1、类是引用对象

menu_list.Add(new MenuLists { Name = menu_list_parent[n].Name, Ico = menu_list_parent[n].HeaderIco, _href = menu_list_parent[n].C_href, ChildMenu = child_menu_list });

childMenu赋值永远指向最后一次的child_menu_list.

 

你可以选中每次循环里 child_menu_list = new 。  。 一个新的实例。

 

实例,去了解什么是实例

 

2、你的代码嵌套太多,命名很相似,看着好痛苦。。

奖励园豆:5
白石君 | 初学一级 |园豆:169 | 2018-07-27 18:20

谢谢,命名的问题,我也很绝望 o(╥﹏╥)o

bgh | 园豆:28 (初学一级) | 2018-07-30 08:54
其他回答(3)
0

List<T>是引用类型,要想不互相影响,List之间不要直接赋值,而要重新Add

大豆男生 | 园豆:607 (小虾三级) | 2018-07-27 18:16

谢谢

支持(0) 反对(0) bgh | 园豆:28 (初学一级) | 2018-07-30 08:54
0

赋值的使用 list. copy() 

疯五五爱喝咖啡 | 园豆:247 (菜鸟二级) | 2018-07-27 19:12

谢谢

支持(0) 反对(0) bgh | 园豆:28 (初学一级) | 2018-07-30 08:55
0
流年飞雨 | 园豆:1923 (小虾三级) | 2018-07-28 12:21

谢谢

支持(0) 反对(0) bgh | 园豆:28 (初学一级) | 2018-07-30 08:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册