C#克隆静态类

C#克隆静态类,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

我已经研究了一天的深度拷贝,但我还是不太明白

这是我想要的

静态类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也被删除。 我意识到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();

克隆一个
静态
类有什么意义?克隆是创建对象的副本<代码>静态
类无法实例化,因此您无法首先创建对象,因此如何复制对象?为什么要在
静态
类中声明类?创建者的意图未知。在静态类中我还需要一个数据。然而,数据量很大。所以我想高效地创建一个克隆。我想保存静态类原始数据。顺便说一下,该方法会更改原始静态类数据。我想避免这样。我的技能还不够。你能告诉我其他的吗?我想你不能克隆一个静态字段。那是没有意义的。你需要创建一个对象列表,然后克隆出有意义的。谢谢。我再试一次@제일일 我添加了一个愿望样本可以帮助你哇,谢谢你的帮助。我意识到我做错了什么。你把酱汁改了一点,使它起作用。