0

可能重复:
如何在我的锯齿状数组中插入一个新数组

我有一个问题,我不知道如何在数组长度中创建一个字符串数组变量。

我现在下面有这段代码:

string[] p = new string[10];
int num = 0;

foreach (Product products in GetAllProducts())
    {
     //do something
     p[num]= "some variable result"
     num++
    }

问题是,我不知道我会得到多少个“p”,虽然我知道它至少会小于 10。但是如果我把它设置为 0,当我启动它时我会得到一个错误,因为它没有不知道“p[num]”所以我正在寻找某种方法使“p”具有可变长度。

有人可以帮帮我吗?谢谢

============已解决==========

List<string> p = new List<string>();
int num = 0;

foreach (Product products in GetAllProducts())
    {
     string s= null;
     //do something ( create s out of multiple parts += s etc.)
     p.add(s)
     num++
    }

感谢解决方案海报

4

8 回答 8

10

List<string>如果您不知道需要添加的项目数,请使用 an而不是数组。

于 2012-08-03T11:24:45.713 回答
1

您的数组长度在实例化后无法修改。使用ArrayListGeneric Lists

于 2012-08-03T11:25:00.693 回答
0

我看到很多人给了你正确的答案,那就是使用列表。如果你最后仍然需要一个数组,你可以很容易地将你的列表转换成这样的数组:

    string[] tempArray = myList.ToArray();
于 2012-08-03T12:35:05.423 回答
0

返回什么GetAllProducts()?它有计数或长度吗?您应该首先调用它,将其保存在变量中,获取计数/长度,然后声明您的数组!

于 2012-08-03T11:27:40.533 回答
0

有两种解决方案。

如果您想继续使用数组:

int num = 0;
var list = GetAllProducts();
string[] p = new string[list.Length]; // Or list.Count if this is a collection

foreach (Product products in list)
{
    //do something
    p[num] = "some variable result";
    num++;
}

否则你应该使用这样的列表:

List<string> p = new List<string>();

foreach (Product products in GetAllProducts())
{
    //do something
    p.Add("some variable result");
}
于 2012-08-03T11:27:51.847 回答
0

因为您的代码对 GetAllProducts 的结果使用了 foreach,所以 GetAllProducts 必须返回一个IEnumerable集合。可能最好的解决方案是将 GetAllProducts 的结果简单地分配给这样的集合。例如,也许它已经返回了一个字符串列表?所以你可以这样做:

List<string> strings = GetAllProducts();

如果您已经从 GetAllProducts 返回了一个集合,则无需使用 foreach 循环来创建数组。

或者简单地说:

var strings = GetAllProducts();

让编译器计算出字符串的类型。

大多数可以用数组做的事情,也可以用 List 做,还有更多(例如将项目添加到 List 的末尾)。

也许您可以发布 GetAllProducts 的签名(尤其是它的返回类型),以便我们更好地为您提供建议?

于 2012-08-03T11:38:23.960 回答
0
var p = new new List<string>(10);
foreach (Product products in GetAllProducts()) 
{ 
    //do something 
    p.Add("some variable result"); 
} 
于 2012-08-03T11:25:23.627 回答
0

使用 Array.Resize() 方法,它允许调整它的大小(通过 n 个索引)。在我的示例中,我将在每一步中按 1 调整:

        string[] array = new string[3]; //create array
        for (int i = 0; i < 5; i++)
        {
            if (array.Length-1 < i) //checking for the available length
            {
                Array.Resize(ref array, array.Length + 1); //when to small, create a new index
            }
            array[i] = i.ToString(); //add an item to array[index] - of i
        }
于 2012-08-03T11:32:29.237 回答