我在我的c#程序中创建了一个string []数组,以保存一堆元素的位置(“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]";
我正在寻找的是类似于动态数组的东西,这样我每次从列表中引入/删除元素时都不必更改索引位置。
答案 0 :(得分:4)
您可以将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#;
请注意,我并不知道该职位的类型,可能是int
,string
甚至是Point
,但您明白了。< / p>
然后,您不需要为索引而烦恼,而是按名称引用所有内容:
var el1_pos = dict["Element #1 Name"];
var el999_pos = dict["Element #999 Name"];
答案 1 :(得分:1)
如果您想要动态调整大小的集合并且不打扰索引,则可以使用List<T>
。您还应该创建一个包含两个属性(Name
和Position
)的类型,并拥有该类型的列表,而不是将它们存储为string
。它更容易维护,每次要获取/设置特定对象的Name
或Position
时,都不必解析字符串。
答案 2 :(得分:1)
通常,您只需在此使用List<String>
即可。 Add
方法允许您只添加元素,无需索引。
List<string> list = new List<string>();
list.Add("Test");
在你的情况下,因为你有&#34;姓名&#34;和&#34;职位&#34;相互关联,请考虑使用List<PositionedThing>
(换言之自定义类)或Dictionary<String, String>
来存储映射。
该课程如下:
public class PositionedThing
{
public String Name {get; set;}
public String Position {get; set;}
}
答案 3 :(得分:0)
尝试
List<string> list = new List<string>();
list.Add("[ELEMENT #1 NAME],[ELEMENT #1POSITION]")
除非我误解了你想要的问题
答案 4 :(得分:0)
您问题中的最后一个词是您要查找的内容:System.Collections.Generic
命名空间中的List<T>
类型:
var list = new List<string>();
list.Add("Blah");
list.Add("Blah blah");
…
接下来,我是否可以建议不要在格式化字符串中编码所有位置信息,而是定义表示位置的自定义类型;至少这样的事情:
class Location
{
public string Name { get; set; }
public string Position { get; set; }
}
然后构建该类型的实例列表:
var locations = new List<Location>();
location.Add(new Location { Name = "Kitchen cupboard", Position = "Above the stove" });
location.Add(new Location { Name = "Kennel", Position = "In the garden" });
…
(如您所见,就像使用数组T[]
一样,您可以为任何类型List<T>
创建T
。)