我当天研究过很多副本,但我还是不太明白。
这就是我想要的。
静态类MyList
List<MenuData> Menu1 = MenuList.Menus.ToList();
List<MenuData> Menu2 = MenuList.Menus.ToList();
我在删除方法上使用Menu2。 但是,Menu1也被删除了。 我意识到由于Swallow Copy,Menu1和Menu2被一起删除。
他们也提到了其他人的样本,但都失败了。
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.
有人要求减少浪费时间。
答案 0 :(得分:0)
我不知道您为什么要克隆静态类
但如果你想要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; }
}
修改强>
如果要克隆对象,则克隆类可以实现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();