C# 静态类的克隆

C# 静态类的克隆,c#,reflection,static,activator,C#,Reflection,Static,Activator,我使用静态列表来保留一些字符串值,当应用程序启动时,一个静态列表就足够了,但是过了一段时间,我需要在不同的静态列表中保留不同的字符串,有没有办法在运行时在C中深度复制或克隆具有不同名称的静态类# 公共类Foo { 公共静态列表命令; } 正如您在上面看到的,我可以轻松地添加和删除静态Foo.orders,但在运行时,我需要另一个类,例如Foo2类。顺便说一句,列表必须是静态的,但是我需要从不同的类中访问列表,并且在开发时不能创建新的类,因为我不知道有多少静态列表 谢谢你如果你真的需要在不传递实

我使用静态列表来保留一些字符串值,当应用程序启动时,一个静态列表就足够了,但是过了一段时间,我需要在不同的静态列表中保留不同的字符串,有没有办法在运行时在C中深度复制或克隆具有不同名称的静态类#

公共类Foo
{
公共静态列表命令;
}
正如您在上面看到的,我可以轻松地添加和删除静态Foo.orders,但在运行时,我需要另一个类,例如Foo2类。顺便说一句,列表必须是静态的,但是我需要从不同的类中访问列表,并且在开发时不能创建新的类,因为我不知道有多少静态列表


谢谢你

如果你真的需要在不传递实例的情况下方便地引用列表,那么你需要从静态类(定义为全局类)转移到存储在你喜欢的任何范围内的单例领域(例如,为线程或执行路径缓存)


但是,我会认真考虑重新思考你的方法,因为传递的情况可能更适合它的声音。 您不能在运行时创建新的静态类,但可以保留列表的静态字典:

public class Foo
{
     public static Dictionary<string,List<string>> Lists 
                                                      = new Dictionary<string,List<string>>
     {
         {"orders", new List<string>()}
     };
}
公共类Foo
{
公共静态词典列表
=新词典
{
{“订单”,新列表()}
};
}

< /代码> 如果您绝对必须使用<代码>静态< /代码>类来处理此操作,并且期望在实例化之后(例如创建其他列表等)来操作它,那么您可以考虑创建另一个可以处理该行为的元素,例如<代码>列表>代码>或<代码>字典<代码>:

Foo.Orders.Add(“List2”,newlist());//在字典中创建一个新列表

最佳实践是为您可能需要的每个列表创建一个单独的公共静态字段。我将编写一个脚本来生成至少10000个列表的代码

public class Foo
{
    public static List<string> orders1;
    public static List<string> orders2;
    public static List<string> orders3;
    public static List<string> orders4;
    public static List<string> orders5;
    public static List<string> orders6;
    public static List<string> orders7;
    public static List<string> orders8;
    public static List<string> orders9;
    public static List<string> orders10;
    public static List<string> orders11;
    public static List<string> orders123;
    public static List<string> orders13;
    public static List<string> orders14;
    public static List<string> orders15;
    public static List<string> orders16;
    public static List<string> orders17;
    public static List<string> orders18;
    public static List<string> orders19;
    public static List<string> orders20;
    public static List<string> orders21;
    public static List<string> orders22;
    public static List<string> orders23;
    public static List<string> orders24;
    public static List<string> orders25;
    public static List<string> orders26;
    public static List<string> orders27;
    public static List<string> orders28;
    public static List<string> orders29;
    public static List<string> orders30;
    public static List<string> orders31;
    public static List<string> orders32;
    public static List<string> orders33;
    public static List<string> orders34;
    public static List<string> orders35;
}
公共类Foo
{
公共静态列表顺序1;
公共静态列表顺序2;
公共静态列表顺序3;
公共静态列表顺序4;
公共静态列表顺序5;
公共静态列表顺序6;
公共静态列表顺序7;
公共静态列表顺序8;
公共静态列表顺序9;
公共静态列表顺序10;
公共静态列表顺序11;
公共静态列表顺序123;
公共静态列表顺序13;
公共静态列表顺序14;
公共静态列表顺序15;
公共静态列表顺序16;
公共静态列表顺序17;
公共静态列表顺序18;
公共静态列表顺序19;
公共静态列表顺序20;
公共静态列表顺序21;
公共静态列表顺序22;
公共静态列表顺序23;
公共静态列表顺序24;
公共静态列表顺序25;
公共静态列表顺序26;
公共静态列表顺序27;
公共静态列表顺序28;
公共静态列表顺序29;
公共静态列表顺序30;
公共静态列表顺序31;
公共静态列表顺序32;
公共静态列表顺序33;
公共静态列表顺序34;
公共静态列表顺序35;
}

这正是对象实例的用途。“开发时无法创建新类”。我想你错过了一些重要的事情。我认为更好的问题可能是,“如何在代码中传递对象实例”或类似的问题。如果您需要在运行时添加某些内容,那么它不是静态的。您所说的“在运行时我需要另一个类,例如Foo2类”是什么意思,或者您真的是在运行时使用代码生成创建类吗?您只是出于方便而使用
静态
类吗?如果你需要执行任何类型的运行时操作,那么你可能需要传递一些东西,而不是使用同一个(而且只有一个)对象的静态实例。我不认为这是可能的。这绝对是疯狂的。请不要浪费评论空间,人们需要它来做出真正的评论
public static Dictionary<string,List<string>> Orders = new Dictionary<string, List<string>>();
Foo.Orders["List1"]; // yields your first list
Foo.Orders.Add("List2",new List<string>()); // Create a new list in your Dictionary
public class Foo
{
    public static List<string> orders1;
    public static List<string> orders2;
    public static List<string> orders3;
    public static List<string> orders4;
    public static List<string> orders5;
    public static List<string> orders6;
    public static List<string> orders7;
    public static List<string> orders8;
    public static List<string> orders9;
    public static List<string> orders10;
    public static List<string> orders11;
    public static List<string> orders123;
    public static List<string> orders13;
    public static List<string> orders14;
    public static List<string> orders15;
    public static List<string> orders16;
    public static List<string> orders17;
    public static List<string> orders18;
    public static List<string> orders19;
    public static List<string> orders20;
    public static List<string> orders21;
    public static List<string> orders22;
    public static List<string> orders23;
    public static List<string> orders24;
    public static List<string> orders25;
    public static List<string> orders26;
    public static List<string> orders27;
    public static List<string> orders28;
    public static List<string> orders29;
    public static List<string> orders30;
    public static List<string> orders31;
    public static List<string> orders32;
    public static List<string> orders33;
    public static List<string> orders34;
    public static List<string> orders35;
}