静态类的克隆

时间:2016-04-20 14:37:42

标签: c# reflection static activator

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

中运行时具有不同名称的静态类
public class Foo
{
    public static List<string> orders;
}

如上所示,我可以轻松添加和删除静态Foo.orders,但在运行时我需要另一个类,例如Foo2类。顺便说一下,列表必须是静态的,但是我需要从不同的类到达列表,也不能在开发时创建新的类,因为有多少静态列表我不知道

谢谢

4 个答案:

答案 0 :(得分:3)

您无法在运行时创建新的静态类,但可以保留列表的静态字典:

public class Foo
{
     public static Dictionary<string,List<string>> Lists 
                                                      = new Dictionary<string,List<string>>
     {
         {"orders", new List<string>()}
     };
}

答案 1 :(得分:3)

如果你绝对必须使用static类来处理它,并且你希望在实例化之后操作它(例如创建其他列表等),那么你可以考虑创建另一个可以处理的元素这种行为,例如List<List<string>>Dictionary<string,List<string>>

public static Dictionary<string,List<string>> Orders = new Dictionary<string, List<string>>();

如果您要使用字典,那么您可以为每个可用列表存储密钥(即List1List2,然后使用其密钥访问每个列表):

Foo.Orders["List1"]; // yields your first list

Foo.Orders.Add("List2",new List<string>()); // Create a new list in your Dictionary

答案 2 :(得分:0)

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

但是,我认真考虑重新考虑你的方法,因为传递实例可能更合适。

答案 3 :(得分:-3)

最佳做法是为您可能需要的每个可能列表创建单独的公共静态字段。我会写一个脚本来生成至少10,000个列表的代码。

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;
}