我有一个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; }
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、你的代码嵌套太多,命名很相似,看着好痛苦。。
谢谢,命名的问题,我也很绝望 o(╥﹏╥)o
List<T>是引用类型,要想不互相影响,List之间不要直接赋值,而要重新Add
谢谢
赋值的使用 list. copy()
谢谢