如何在c#中声明动态数组

本文关键字:声明 动态 数组 | 更新日期: 2023-09-27 18:07:58

我正在研究silverligth5(我以前的经验是c++),我必须创建一个动态数组,其大小是动态决定的。

直到我把所有的东西都变成静态的,就像这样:

string[] position = new string[20]; //it must be dynamic I don't want to fix it to 20
 for (int i = 0; i < pv.Root.Parameter.Count; i++) 
 {
    if (name == pv.Root.Parameter[i].Name) 
    {
        position[i] = name;
    }
 }

可以看到,我这样做的方式将只有大小20,我希望它的长度只与pv.Root.Parameter.Count相同。

如何做到这一点?

编辑/问题时,我试图实现它通过列表:我有问题在这一行:

if (pv.Root.Parameter[loopCount].Name == position[loopCount])
{ 
   rowGrid.Opacity=0.3;
}

因为它肯定不会工作position[loopCount],因为位置是一个列表,不能像这样索引。如何索引?

如何在c#中声明动态数组

传递pv.Root.Parameter.Count而不是20作为数组长度。

string[] position = new string[pv.Root.Parameter.Count];

您可能需要一个"无限"数组。使用List代替数组

在你的例子中:

List<string> positions = new List<string>();
 for (int i = 0; i < pv.Root.Parameter.Count; i++) 
 {
    if (name == pv.Root.Parameter[i].Name) 
    {
        positions.Add(name); //To get an element use positions.ElementAt(<index>)
    }
 }

如果需要n个元素的数组,则使用:

string[] position = new string[pv.Root.Parameter.Count]];

您可以尝试使用Linq:

String[] position = pv.Root.Parameter
  .Where(item => name == item.Name)
  .Select(item => item.Name)
  .ToArray();

如果你想要List<T>而不是array

List<String> position = pv.Root.Parameter
  .Where(item => name == item.Name)
  .Select(item => item.Name)
  .ToList();