Как объявить динамический массив в C #

1

Я работаю над 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] потому что позиция является списком и не может быть проиндексирована так. Как проиндексировать его?

  • 3
    По какой причине вы не можете работать с общим списком?
  • 2
    Как говорили другие: примите List<T> . Массив 70-х годов
Показать ещё 1 комментарий
Теги:
silverlight
dynamic-arrays
silverlight-5.0

3 ответа

7

передайте pv.Root.Parameter.Count вместо 20 в качестве длины массива.

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

Или используйте список, если вы не хотите фиксированного размера.

  • 0
    У меня есть проблема в вашем коде, потому что, когда я использую List для этого, после этого я также должен сделать это, если (pv.Root.Parameter [loopCount] .Name == position [loopCount]) && pv.Root.Parameter [loopCount] .Component.Attributes.Value == 1) {rowGrid.Opacity = 0.3; } И ЭТО СЛЕДУЕТ СОЗДАТЬ ПРОБЛЕМУ «position [loopCount]» в этом условии if (). Как ты решаешь эту проблему?
  • 0
    пожалуйста, смотрите редактирование.
Показать ещё 5 комментариев
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();
  • 0
    Спасибо за ответ. Но, пожалуйста, смотрите редактирование вопроса
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]];
  • 0
    У меня есть проблема в вашем коде, потому что, когда я использую List для этого, после этого я также должен сделать это, если (pv.Root.Parameter [loopCount] .Name == position [loopCount] && pv.Root.Parameter [ loopCount] .Component.Attributes.Value == 1) {rowGrid.Opacity = 0.3; } И ЭТО СЛЕДУЕТ СОЗДАТЬ ПРОБЛЕМУ «position [loopCount]» в этом условии if (). Как ты решаешь эту проблему?
  • 0
    пожалуйста, отредактируйте.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню