3

我想通过指定一个值列表来填充一个数组列表,就像我将一个整数数组一样,但我不确定如何在不重复调用“add”方法的情况下这样做。

例如,我想将 { 1, 2, 3, "string1", "string2" } 分配给 arraylist。我知道对于其他数组,您可以进行如下分配:

int[] IntArray = {1,2,3};

是否有类似的方法可以为数组列表执行此操作?我尝试了 addrange 方法,但花括号方法没有实现 ICollection 接口。

4

5 回答 5

13

根据您使用的 C# 版本,您有不同的选择。

C# 3.0 有集合初始化器,详情见Scott Gu 的博客

这是您的问题的一个示例。

ArrayList list = new ArrayList {1,2,3};

如果您正在初始化一个集合对象,大多数构造函数都采用与 AddRange 类似的组件,尽管正如您再次提到的,这可能不是一个选项。

于 2008-09-17T21:47:02.367 回答
8

数组列表有接受ICollection的ctor,它是由Array类实现的。

object[] myArray = new object[] {1,2,3,"string1","string2"};
ArrayList myArrayList = new ArrayList(myArray);
于 2008-09-17T21:47:00.840 回答
1

(有点回答我自己的问题但是......)

我发现最接近我想要的是使用 ArrayList.Adapter 方法:

object[] values = { 1, 2, 3, "string1", "string2" };
ArrayList AL = new ArrayList();
AL = ArrayList.Adapter(values);

//or during intialization
ArrayList AL2 = ArrayList.Adapter(values);

这足以满足我的需要,但我希望它可以在一行中完成,而无需像其他人建议的那样创建临时数组。

于 2008-09-17T22:13:56.220 回答
1

您的评论暗示您选择 ArrayList 是因为它是您找到的第一个组件。

假设您只是在寻找整数列表,这可能是最好的方法。

List<int> list = new List<int>{1,2,3};

如果您使用的是 C# 2.0(有泛型,但没有集合初始化器)。

List<int> list = new List<int>(new int[] {1, 2, 3});

尽管 int[] 格式在旧版本中可能不正确,但您可能必须指定数组中的项目数。

于 2008-09-17T22:20:04.050 回答
0

我假设您没有使用具有集合初始值设定项的 C# 3.0。如果您不担心创建临时数组的开销,您可以在 1.1/2.0 中这样做:

ArrayList list = new ArrayList(new object[] { 1, 2, 3, "string1", "string2"});
于 2008-09-17T21:53:21.290 回答