C#:是否可能进行隐式Arraylist分配?

时间:2020-03-05 19:00:09  来源:igfitidea点击:

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

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

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

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

解决方案

回答

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

object[] myArray = new object[] {1,2,3,"string1","string2"};
ArrayList myArrayList = new ArrayList(myArray);

回答

根据使用的C版本,我们有不同的选择。

C3.0具有集合初始化程序,请参见Scott Gu的博客中的详细信息

这是问题的示例。

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

而且,如果要初始化集合对象,则大多数构造函数都具有与AddRange相似的组件,尽管再次提到,这可能不是一个选择。

回答

我假设我们没有使用带有集合初始化程序的C3.0。如果我们不必担心创建临时数组的开销,则可以在1.1 / 2.0中这样做:

ArrayList list = new ArrayList(new object[] { 1, 2, 3, "string1", "string2"});

回答

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

我发现与我想要的最接近的东西是使用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};

并且,如果我们使用的是C2.0(具有泛型,但没有集合初始值设定项)。

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

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