我使用静态列表来保存一些字符串值,当应用程序启动时只有一个静态列表就足够了,但过了一段时间我需要在不同的静态列表中保留不同的字符串,有没有办法深度复制或克隆一个C#
中运行时具有不同名称的静态类public class Foo
{
public static List<string> orders;
}
如上所示,我可以轻松添加和删除静态Foo.orders,但在运行时我需要另一个类,例如Foo2类。顺便说一下,列表必须是静态的,但是我需要从不同的类到达列表,也不能在开发时创建新的类,因为有多少静态列表我不知道
谢谢
答案 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>>();
如果您要使用字典,那么您可以为每个可用列表存储密钥(即List1
,List2
,然后使用其密钥访问每个列表):
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;
}