我有一个问题,我不知道如何在数组长度中创建一个字符串数组变量。
我现在有以下代码:
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
答案 0 :(得分:10)
如果您不知道需要添加的项目数,请使用List<string>
而不是数组。
答案 1 :(得分:1)
实例化后,无法修改数组长度。使用ArrayList或Generic 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();