静态克隆 Class

Clone of Static Class

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

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

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

谢谢

如果您真的必须在不传递实例的情况下方便地引用列表,您将希望摆脱静态 class(根据定义是全局的)并进入以下领域存储在您喜欢的任何范围内的单例(例如,为线程或执行路径缓存)。

但是,我会认真考虑重新考虑您的方法,因为从它的声音来看,传递实例可能更合适。

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

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

如果您绝对必须使用 static class 来处理此问题,并且您希望在实例化后对其进行操作(例如创建其他列表等),那么您可能会考虑创建另一个可以处理该行为的元素,例如 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

最佳做法是为您可能需要的每个可能的列表创建一个单独的 public 静态字段。我会编写一个脚本来生成至少 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;
}