【问题标题】:C#: Is Implicit Arraylist assignment possible?C#:隐式 Arraylist 分配可能吗?
【发布时间】:2010-09-10 10:04:15
【问题描述】:

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

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

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

对于数组列表是否有类似的方法?我试过 addrange 方法,但是花括号方法没有实现 ICollection 接口。

【问题讨论】:

  • 请解释为什么要使用 ArrayList,而不是现代集合之一。
  • 我对使用 C# 比较陌生,ArrayList 集合是我学会使用的第一个集合。如果您对我可以使用什么有更好的建议,我很乐意听到。
  • 如果您必须支持/维护 1.1 应用程序,则可能不存在“现代”集合

标签: c# arraylist


【解决方案1】:

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

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

【讨论】:

  • 如下所述,更简单的版本可能是:ICollection = new MyType[] { myType1, myType2 };
【解决方案2】:

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

C# 3.0 有集合初始化器,详情请见Scott Gu's Blog

这是你的问题的一个例子。

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

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

【讨论】:

  • 正是我需要的,你
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

      您的 cmets 暗示您选择了 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[] 格式在旧版本中可能不正确,但您可能必须指定数组中的项目数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多