我想通过指定一个值列表来填充一个数组列表,就像我将一个整数数组一样,但我不确定如何在不重复调用“add”方法的情况下这样做。
例如,我想将 { 1, 2, 3, "string1", "string2" } 分配给 arraylist。我知道对于其他数组,您可以进行如下分配:
int[] IntArray = {1,2,3};
是否有类似的方法可以为数组列表执行此操作?我尝试了 addrange 方法,但花括号方法没有实现 ICollection 接口。
根据您使用的 C# 版本,您有不同的选择。
C# 3.0 有集合初始化器,详情见Scott Gu 的博客
这是您的问题的一个示例。
ArrayList list = new ArrayList {1,2,3};
如果您正在初始化一个集合对象,大多数构造函数都采用与 AddRange 类似的组件,尽管正如您再次提到的,这可能不是一个选项。
数组列表有接受ICollection的ctor,它是由Array类实现的。
object[] myArray = new object[] {1,2,3,"string1","string2"};
ArrayList myArrayList = new ArrayList(myArray);
(有点回答我自己的问题但是......)
我发现最接近我想要的是使用 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);
这足以满足我的需要,但我希望它可以在一行中完成,而无需像其他人建议的那样创建临时数组。
您的评论暗示您选择 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[] 格式在旧版本中可能不正确,但您可能必须指定数组中的项目数。
我假设您没有使用具有集合初始值设定项的 C# 3.0。如果您不担心创建临时数组的开销,您可以在 1.1/2.0 中这样做:
ArrayList list = new ArrayList(new object[] { 1, 2, 3, "string1", "string2"});