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 []格式可能不正确,但是我们可能必须指定数组中的项目数。