根据您的评论:
如果您多次创建 'static Item objA = new Item()',最终得到:
static Item objA = new Item();
static Item objB = new Item();
....
static Item objZ = new Item();
然后将它们全部放入列表中,您几乎别无他法:
list = new List<Item>;
list.Add(objA);
list.Add(objB);
...
list.Add(objZ);
这是因为您已经创建了这些项目,并且已经将它们放入了几十个不同的变量中,并且要将它们放入列表中,您只需告诉编译器应该从哪里获取它们。这意味着,您必须告诉他从 objA 变量、objB 变量和 (...) 等中获取它。这是因为您将它们放在不同的变量中。
关键是你一开始就应该选择错误的方式。首先,您不应该创建“objA、objB、objC、....、objZ”。它应该是一个列表或数组或字典或任何集合,以便您可以轻松地一次访问所有项目。不应将它们放入单独的变量中。
如果可以,请不要创建可能的变量。例如,使用字典:
Dictionary<string, Item> items = new Dictionary<string, Item>();
items["A"] = new Item();
items["B"] = new Item();
...
items["Z"] = new Item();
现在,您可以轻松地创建一个项目:
items["F"].Something = 321;
items["O"].Something = 123;
您也可以轻松访问所有项目:
var number = items.Values.Count;
itemList = new List<Item>( items.Values );
当然,有时你只是没有这样的选择。例如,WinForms Designer 会为您创建变量,如果您在表单上放置 100 个标签,您几乎总是会拥有 100 个变量(尽管绝不是静态的)。
尽管如此,所有这些变量都将属于某个类。如果您的项目设置允许您使用反射,那么您可以检查该类并获取名称/属性列表,并且您可以读取它们的值:
class X
{
public static Item objA = new Item();
..., objB, objC, ..... ,.....,
}
...
List<Item> items = new List<Item>();
foreach (var field in typeof(ListaUczniow).GetFields(BindingFlags.Static | BindingFlags.Public))
if (field.Name.StartsWith("obj") && field.FieldType == typeof(Item))
items.Add( (Item) field.GetValue(null) );
这可能对您有用,但总的来说,这是一种非常脆弱的方法:您必须注意正确的 BindingFlags、正确的字段名称、正确的字段类型,并且编译器无法自动检查对 Item 的强制转换,甚至可能会出现一些安全问题如果您在 Silverlight 上编写 ie 并且您的字段是私有的,则会出现这种情况。