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

时间:2014-06-10 08:18:04

标签: c# .net silverlight silverlight-5.0 dynamic-arrays

我正在研究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]因为position是List而且不能像这样索引。如何索引?

3 个答案:

答案 0 :(得分:7)

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

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

如果您不想要固定尺寸,请使用list

答案 1 :(得分:4)

你可能想要一个“无限”数组。 使用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]];

答案 2 :(得分:4)

您可以尝试使用 Linq

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

或者如果你想要List<T>而不是数组

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