2012-08-03 44 views
0

可能重复的:
how to inset a new array to my jagged arrayC#增加长度的字符串数组

我有一个问题,在这里我不知道我怎么可以使数组长度的字符串数组变量。

我现在下面这段代码:

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

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

的问题是,我不知道有多少“P”,我会得到的,尽管我知道这ATLEAST将低于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++ 
    } 

感谢名单到溶液海报

回答

10

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

+0

阿哈列表。还没有真正知道那个(我知道我知道,我不是专业人士),感谢这个! – Dante1986 2012-08-03 11:28:39

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

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

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

使用Array.Resize()方法,它允许调整(通过n个索引)。 在我〔实施例,我将在的每一步reize按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 
     } 
0

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

List<string> strings = GetAllProducts(); 

有没有需要有一个foreach循环当你已经有一个集合反正是从GetAllProducts返回到创建一个数组。

或者干脆:

var strings = GetAllProducts(); 

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

大多数事情你可以用一个数组来做,你也可以使用一个List和其他一些东西(比如将项目添加到List的末尾)。

也许你可以发布GetAllProducts的签名(尤其是它的返回类型),这样我们可以更好地建议你?

0

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

string[] tempArray = myList.ToArray();