Я работаю над 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
.
Как достичь этого?
EDIT/проблема, когда я пытаюсь добиться ее через список: у меня проблема в этой строке:
if (pv.Root.Parameter[loopCount].Name == position[loopCount])
{
rowGrid.Opacity=0.3;
}
Потому что, конечно, он не будет работать в position[loopCount]
потому что позиция является списком и не может быть проиндексирована так. Как проиндексировать его?
передайте pv.Root.Parameter.Count
вместо 20
в качестве длины массива.
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>
а не массив
List<String> position = pv.Root.Parameter
.Where(item => name == item.Name)
.Select(item => item.Name)
.ToList();
Вероятно, вам нужен "бесконечный" массив. Используйте 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]];
List<T>
. Массив 70-х годов