该程序仅用于说明目的。 我想要一个整数作为输入,如果它大于零,请在ArrayList中使用该整数创建一个ArrayList。 我尝试了许多(不正确)方法,最终决定了您在下面看到的内容。 但是,我不太喜欢它的外观。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Enter in a number of the size of the ArrayList that you want: ");
            int arraySize = int.Parse(Console.ReadLine());
            if (arraySize > 0)
            {
                ArrayList newList = CreateList(arraySize,out newList);
                newList.Add(arraySize);
                Console.WriteLine("the size of the array is {0}",newList.Count);
                Console.ReadLine();
            }
            else
            {
                Console.WriteLine("You did not create an ArrayList");
            }
            Console.WriteLine("here you can't access the array");
            Console.ReadLine();




        }
        public static ArrayList CreateList(int x,out ArrayList outList)
        {
            ArrayList al = new ArrayList(x);
            outList= al;
            return outList;

        }
    }

我的思考过程是,如果用户决定采取某种行动,那么程序将不会创建ArrayList来节省资源(我知道这个例子很愚蠢)。 但是,我仍然必须在main方法中初始化一个ArrayList,如果我取出newList.Add(arraySize)行,则如果用户输入的数字大于0,则程序将以0输出运行。是否有任何方法可以使之大于0的任何输入都将导致ArrayList准备好与添加的元素一起使用? 因此,如果我们注释掉newList.Add(arraySize)该程序仍将ArrayList的大小打印为1(前提是该数字大于0)。

在此示例中,元素数量最大为1,而不是用户可能输入的数量。

===============>>#1 票数:2

一个评论:您不必在函数中添加返回类型,请尝试以下操作:

ArrayList newList =null;
CreateList(arraySize,out newList);


public static void CreateList(int x,out ArrayList outList)
{
   outList = new ArrayList(x);
}

===============>>#2 票数:2 已采纳

这里有很多错误。

首先,您无法添加列表的大小。 它在构造函数中初始化,然后随着您添加和删除元素而增大和缩小。

所以这行:

newList.Add(arraySize);

具有误导性,几乎可以肯定不是您想要的。 您可能想要添加一个元素(在这种情况下,变量名具有误导性),或者您想要设置数组的大小或容量,在这种情况下,代码无法满足您的要求。

您可能应该意识到,列表的大小容量之间也存在差异:

  • 大小是数组中元素的数量。
  • 容量是列表的基础数组的大小,它将在任何时间点等于或大于列表的大小

这就是将列表初始化为其他值时对Count的调用返回0的原因。 计数是指列表中的项目数,而不是内部数组的长度。 您想改为调用Capacity属性:

Console.WriteLine("the size of the array is {0}", newList.Capacity);

列表( ArrayListList )在内部使用数组,数组的大小固定。 因此,容量是指该阵列的长度。 当您向数组已满的列表中添加新元素时,列表的Add方法会创建一个新数组,该数组的长度是旧数组的两倍,将所有元素复制到较大的数组中,并在末尾附加新值,并丢弃旧数组。

简而言之,函数:

public static ArrayList CreateList(int x,out ArrayList outList) {
    ArrayList al = new ArrayList(x);
    outList= al;
    return outList;
}

基本上可以,尽管有点多余,因为它应该使用out参数或返回列表,而不能同时使用两者。 对于您的情况,我会做类似的事情:

public static void CreateList<T>(int capacity, out List<T> list) {
    list = new List<T>(capacity);
}

尽管这是一种毫无意义的方法。

===============>>#3 票数:1

ArrayList 构造函数中的 int参数是“初始容量”,这是一项性能功能(在添加项目之前,列表的大小不会被调整,直到达到最大容量为止),因此它不会对列表的实际大小产生影响。 如果要返回包含一个项目的列表,请将该项目添加到CreateList函数中。

===============>>#4 票数:1

因为,很难从您的解释中理解问题是什么,所以我将在黑暗中开枪。 这是您所追求的:

using System;
using System.Collections;

namespace SO16071463
{
    class Program
    {
        static void Main()
        {
            Console.Write("Enter in a number of the size of the ArrayList that you want: ");
            int arraySize = int.Parse(Console.ReadLine());
            if (arraySize > 0)
            {
                ArrayList newList = new ArrayList { arraySize };
                Console.WriteLine("the size of the array is {0}", newList.Count);
                Console.ReadLine();
            }
            else
            {
                Console.WriteLine("You did not create an ArrayList");
            }
            Console.WriteLine("here you can't access the array");
            Console.ReadLine();
        }
    }
}

  ask by wootscootinboogie translate from so

未解决问题?本站智能推荐: