C#增加字符串数组的长度

时间:2012-08-03 11:23:04

标签: c# arrays

  

可能重复:
  how to inset a new array to my jagged array

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

我现在有以下代码:

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++
    }

thanx to solution poster

8 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

var p = new new List<string>(10);
foreach (Product products in GetAllProducts()) 
{ 
    //do something 
    p.Add("some variable result"); 
} 

答案 3 :(得分:0)

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

答案 4 :(得分: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:

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

foreach (Product products in GetAllProducts())
{
    //do something
    p.Add("some variable result");
}

答案 5 :(得分: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
        }

答案 6 :(得分:0)

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

List<string> strings = GetAllProducts();

当你已经从GetAllProducts返回一个集合时,没有必要有一个foreach循环来创建一个数组。

或者简单地说:

var strings = GetAllProducts();

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

您可以使用数组执行大多数操作,也可以使用List,以及更多内容(例如将项添加到List的末尾)。

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

答案 7 :(得分:0)

我看到很多人给出了正确答案,即使用列表。如果最后仍需要一个数组,您可以轻松地将列表转换为如下所示的数组:

    string[] tempArray = myList.ToArray();