C#克隆静态类[重复]
Posted
技术标签:
【中文标题】C#克隆静态类[重复]【英文标题】:C# clone static class [duplicate] 【发布时间】:2018-08-28 17:20:16 【问题描述】:我研究了一天的深拷贝,但我还是不太明白。
这就是我想要的。
静态类 MyList
List<MenuData> Menu1 = MenuList.Menus.ToList();
List<MenuData> Menu2 = MenuList.Menus.ToList();
我在删除方法上使用 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);
ErrMessage : The format 'Models.MenuData' is not marked serializable.
要求减少进一步的时间浪费。
【问题讨论】:
如何克隆static
类有意义?克隆是创建对象的副本。 static
类不能被实例化,所以你一开始就不能创建一个对象,那么你怎么能复制一个呢?
为什么要在 static
类中声明一个类?
创作者的意图未知。我需要静态类中的更多数据。但是,数据量很大。所以我想高效地创建一个克隆。
【参考方案1】:
我不知道你为什么要克隆一个静态类
但如果你想Serialize
对象,你需要使用属性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;
serialization
编辑
如果你想克隆对象,你的克隆类可以实现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();
你可以在外面获取克隆列表。
MenuList list = new MenuList();
List<MenuData> CloneList = list.CloneMenus();
【讨论】:
我想保存静态类 Origin 数据。顺便说一句,该方法更改了原始静态类数据。我想避免这种情况。我的技能还不够。除了这个,你能告诉我吗? 我认为你不能克隆一个静态字段。那没有意义。你需要创建一个对象 List 然后克隆它才有意义。 谢谢。我再试一次 @제일일 我添加一个示例希望可以帮助你 哇,谢谢你的帮助。我意识到我做错了什么。您已经稍微修改了您的酱汁以使其发挥作用。以上是关于C#克隆静态类[重复]的主要内容,如果未能解决你的问题,请参考以下文章