C# 动态数组/索引

C# Dynamic Array/ index

我正在我的 C# 程序中创建一个字符串 [] 数组来保存一堆元素的位置 ("name","Position")。问题是任何时候我必须引入一个新元素我必须根据元素索引在几个地方更改代码:

   string[] list = new string[4];
   list[0] = "[ELEMENT #1 NAME],[ELEMENT #1POSITION]";
   list[1] = "[ELEMENT #2 NAME],[ELEMENT #2POSITION]";
   list[2] = "[ELEMENT #3 NAME],[ELEMENT #3POSITION]";
   list[3] = "[ELEMENT #4 NAME],[ELEMENT #4POSITION]";

我正在寻找的是类似于动态数组的东西,这样我就不必每次从列表中引入/删除元素时都更改索引位置。

尝试

List<string> list = new List<string>();
list.Add("[ELEMENT #1 NAME],[ELEMENT #1POSITION]")

除非我误解了你的问题,否则应该是你想要的

如果您想要一个动态大小 的集合并且不需要索引,您可以使用List<T>。您还应该创建一个具有两个属性(NamePosition)的类型,并拥有该类型的列表,而不是将它们存储为 string。它更易于维护,您不必每次都想 get/set 特定对象的 NamePosition 时解析字符串。

通常,您会在这里使用 List<String>Add 方法允许您只添加一个元素,不需要索引。

List<string> list = new List<string>();
list.Add("Test");

在您的情况下,由于 "Name" 和 "Position" 相互关联,请考虑使用 List<PositionedThing>(换句话说,自定义 class)或Dictionary<String, String> 来存储您的映射。

class 看起来像:

public class PositionedThing
{
    public String Name {get; set;}
    public String Position {get; set;}
}

可以使用List<string>作为动态数组,支持IEnumerable<string>枚举,也可以调用LINQ和ToArray().

例如:

var list = new List<string>();

list.Add("[ELEMENT #1 NAME],[ELEMENT #1POSITION]");

string array[] = list.ToArray();

但是,在这种情况下我实际上推荐字典而不是列表,字典可以让你存储键值对。

例如:

var dict = new Dictionary<string,int>();

dict["Element #1 Name"] = #Element #1 Position#;

请注意,我真的不知道位置是什么类型,可能是 intstring 甚至 Point,但你明白了。

这样您就不需要为索引而烦恼,而是通过名称来引用所有内容:

var el1_pos = dict["Element #1 Name"];
var el999_pos = dict["Element #999 Name"];