0

该程序仅用于说明目的。我想将一个整数作为输入,如果它大于零,则在 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,而不是用户可能输入的数量。

4

4 回答 4

2

一条评论:您不必为函数添加返回类型,试试这个:

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


public static void CreateList(int x,out ArrayList outList)
{
   outList = new ArrayList(x);
}
于 2013-04-17T22:53:51.517 回答
2

这里有很多问题。

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

所以这一行:

newList.Add(arraySize);

具有误导性,几乎可以肯定不是您想要的。您要么想要添加一个元素(在这种情况下,变量名称会产生误导),要么您想要设置数组的大小或容量,在这种情况下,代码没有按照您的意愿行事。

您可能应该知道列表的大小容量之间的差异:

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

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

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);
}

尽管就目前而言,这是一种毫无意义的方法。

于 2013-04-17T23:04:08.737 回答
1

ArrayList 构造函数中的int 参数是“初始容量”,这是一个性能特性(在添加项目时列表不会调整大小,直到达到最大容量),因此它不会影响列表的实际大小。如果您想返回一个包含一个项目的列表,请在您的CreateList函数中添加该项目。

于 2013-04-17T22:49:56.017 回答
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();
        }
    }
}
于 2013-04-17T23:05:52.830 回答