C#克隆静态类
我已经研究了一天的深度拷贝,但我还是不太明白 这是我想要的 静态类MyListC#克隆静态类,c#,asp.net,C#,Asp.net,我已经研究了一天的深度拷贝,但我还是不太明白 这是我想要的 静态类MyList List<MenuData> Menu1 = MenuList.Menus.ToList(); List<MenuData> Menu2 = MenuList.Menus.ToList(); List Menu1=MenuList.Menus.ToList(); List Menu2=MenuList.Menus.ToList(); 我在remove方法上使用Menu2。 但是,Menu1
List<MenuData> Menu1 = MenuList.Menus.ToList();
List<MenuData> Menu2 = MenuList.Menus.ToList();
List Menu1=MenuList.Menus.ToList();
List Menu2=MenuList.Menus.ToList();
我在remove方法上使用Menu2。
但是,Menu1也被删除。
我意识到Menu1和Menu2是因为Swallow Copy一起删除的
他们还参考了其他人的样本,但没有成功
static class MenuList
{
public class MenuData
{
public string ID { get; set; }
public string Text { get; set; }
public string Image { get; set; }
public Boolean Expanded { get; set; }
}
public static List<MenuData> Menus = new List<MenuData>()
{
new MenuData {
ID = "1",
Text = "Service",
Image = "file_path.png",
Expanded = false
},
};
public static T Clone<T>(T obj)
{
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
public static List<MenuData> CopyMenus = MenuList.Clone(MenuList.Menus);
}
静态类菜单列表
{
公共类菜单数据
{
公共字符串ID{get;set;}
公共字符串文本{get;set;}
公共字符串图像{get;set;}
公共布尔扩展{get;set;}
}
公共静态列表菜单=新列表()
{
新MenuData{
ID=“1”,
Text=“服务”,
Image=“file\u path.png”,
扩展=错误
},
};
公共静态T克隆(T obj)
{
使用(var ms=new MemoryStream())
{
var formatter=新的二进制格式化程序();
序列化(ms,obj);
ms.Position=0;
返回(T)格式化程序。反序列化(ms);
}
}
公共静态列表copymones=MenuList.Clone(MenuList.Menus);
}
错误消息:格式“Models.MenuData”未标记为可序列化。
它被要求减少进一步的时间浪费。我不知道你为什么要克隆一个静态类 但是,如果您想
序列化
对象,则需要使用属性Serializable
来标记序列化类
[Serializable]
public class MenuData
{
public string ID { get; set; }
public string Text { get; set; }
public string Image { get; set; }
public Boolean Expanded { get; set; }
}
编辑
如果要克隆对象,克隆类可以实现ICloneable
接口
这是一个样本
public class MenuList
{
public List<MenuData> Menus { get; private set; }
public MenuList()
{
Menus = new List<MenuData>()
{
new MenuData {
ID = "1",
Text = "Service",
Image = "file_path.png",
Expanded = false
},
};
}
public class MenuData : ICloneable
{
public string ID { get; set; }
public string Text { get; set; }
public string Image { get; set; }
public Boolean Expanded { get; set; }
public object Clone()
{
return new MenuData()
{
ID = this.ID,
Text = this.Text,
Expanded = this.Expanded,
Image = this.Image
};
}
}
public List<MenuData> CloneMenus()
{
return Menus.Select(o => (MenuData)o.Clone()).ToList();
}
}
公共类菜单列表
{
公共列表菜单{get;private set;}
公共货币主义者()
{
菜单=新列表()
{
新MenuData{
ID=“1”,
Text=“服务”,
Image=“file\u path.png”,
扩展=错误
},
};
}
公共类菜单数据:iClonable
{
公共字符串ID{get;set;}
公共字符串文本{get;set;}
公共字符串图像{get;set;}
公共布尔扩展{get;set;}
公共对象克隆()
{
返回新的MenuData()
{
ID=this.ID,
Text=this.Text,
Expanded=this.Expanded,
Image=this.Image
};
}
}
公共列表CloneMenus()
{
返回菜单。选择(o=>(MenuData)o.Clone()).ToList();
}
}
您可以在外部获取克隆列表
MenuList list = new MenuList();
List<MenuData> CloneList = list.CloneMenus();
MenuList list=new MenuList();
List CloneList=List.CloneMenus();
克隆一个静态类有什么意义?克隆是创建对象的副本<代码>静态
类无法实例化,因此您无法首先创建对象,因此如何复制对象?为什么要在静态
类中声明类?创建者的意图未知。在静态类中我还需要一个数据。然而,数据量很大。所以我想高效地创建一个克隆。我想保存静态类原始数据。顺便说一下,该方法会更改原始静态类数据。我想避免这样。我的技能还不够。你能告诉我其他的吗?我想你不能克隆一个静态字段。那是没有意义的。你需要创建一个对象列表,然后克隆出有意义的。谢谢。我再试一次@제일일 我添加了一个愿望样本可以帮助你哇,谢谢你的帮助。我意识到我做错了什么。你把酱汁改了一点,使它起作用。