此计划纯粹是为了说明目的。我想取一个整数作为输入,如果它大于零,则在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,而不是用户可能输入的数量。
答案 0 :(得分:2)
一条评论: 您不必将返回类型放入函数中试试这个:
ArrayList newList =null;
CreateList(arraySize,out newList);
public static void CreateList(int x,out ArrayList outList)
{
outList = new ArrayList(x);
}
答案 1 :(得分:2)
这里出现了很多问题。
首先,您不能添加列表的大小。它在构造函数中初始化,然后随着添加和删除元素而增长和缩小。
所以这一行:
newList.Add(arraySize);
误导,几乎肯定不是你想要的。您要么添加一个元素(在这种情况下变量名称具有误导性),或者您想设置数组的大小或容量,在这种情况下代码没有按照您的意愿执行。
您可能应该注意的列表的 size 和 capacity 之间也存在差异:
当您将列表初始化为其他值时,这就是您对 Count 的调用返回0的原因。 Count 是指列表中的项目数,而不是内部数组的长度。您想要改为调用容量属性:
Console.WriteLine("the size of the array is {0}", newList.Capacity);
列表( ArrayList 和 List )在内部使用数组,它们具有固定大小。所以容量是指该数组的长度。当您向阵列已满的列表中添加新元素时,列表的 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);
}
尽管这是一个非常毫无意义的方法。
答案 2 :(得分:1)
ArrayList
constructor中的Int参数是“初始容量”,这是一种性能特征(在添加项目直到达到最大容量时,列表不会调整大小),因此它没有什么区别列出的实际大小。如果您想返回包含一个项目的列表,请在CreateList
函数中添加该项目。
答案 3 :(得分: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();
}
}
}