静态克隆 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>>();
如果您要使用字典,那么您可以为每个可用列表存储一个键(即 List1
、List2
,然后使用其键访问每个列表):
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;
}
我正在使用静态列表来保存一些字符串值,当应用程序启动时只需要一个静态列表就足够了,但过了一段时间我需要在不同的静态列表中保存不同的字符串,有没有办法进行深度复制或克隆在 C#
中运行时具有不同名称的静态 classpublic 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>>();
如果您要使用字典,那么您可以为每个可用列表存储一个键(即 List1
、List2
,然后使用其键访问每个列表):
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;
}