C # неназначенный массив, но может присвоить ему что-нибудь? - PullRequest
0 голосов
/ 20 декабря 2011

У меня возникли некоторые проблемы с работой этого кода на C #. Я могу заставить его работать, если я использую console.write, который я закомментировал, но я могу получить те же результаты, хранящиеся в этом массиве, для использования в другой раздел моей программы.

FileInfo[] selectionFileOrder;
     for (int index = 0; index < dateAllOrder.Length; index++)
     {
          if (dateAllOrder[index].LastAccessTime.Month == DateTime.Now.Month)
          {
               int i = 0;
               i++;
               selectionFileOrder[i] = dateAllOrder[index];
               // Console.Write("{1}. {0}", dateAllOrder[index].Name, index);
               // Console.Write(" ({0}) ", dateAllOrder[index].Length);
               Console.WriteLine();
          }
      }

Я посмотрел на Google и, похоже, не могу найти никаких ответов на мою проблему. Я знаю, что это переменная selectionFileOrder, которая не подписана, но мне нечего ей назначить. Любые свежие идеи будут полезны

Спасибо

Ответы [ 4 ]

7 голосов
/ 20 декабря 2011

Вам нужно инициализировать массив:

FileInfo[] selectionFileOrder = new FileInfo[dateAllOrder.Length];

или лучше, используйте Список:

IList<FileInfo> selectionFileOrder = new List<FileInfo>();
foreach(FileInfo item in dateAllOrder)
{
     if (item.LastAccessTime.Month == DateTime.Now.Month)
     {
          selectionFileOrder.Add(item);
          // Console.Write("{1}. {0}", dateAllOrder[index].Name, index);
          // Console.Write(" ({0}) ", dateAllOrder[index].Length);
          Console.WriteLine();
     }
}

Или лучше, используйте LINQ!

3 голосов
/ 20 декабря 2011

Я бы использовал LINQ для этого:

FileInfo[] selectionFileOrder = dateAllOrder.Where(
    d => d.LastAccessTime.Month == DateTime.Today.Month).ToArray();

Поскольку, похоже, вы не знаете, насколько большим массив должен быть заранее, я бы порекомендовал такой список:

 var selectionFileOrder = new List<FileInfo>();
 for (int index = 0; index < dateAllOrder.Length; index++)
 {
      if (dateAllOrder[index].LastAccessTime.Month == DateTime.Now.Month)
      {
           selectionFileOrder.Add(dateAllOrder[index]);
      }
  }

Вы можете присвоить список массиву позже, если вам нравится

FileInfo[] array = selectionFileOrder.ToArray();

Также выглядело, как будто у вас ошибка, в которой i всегда будет 1, что, я думаю, не то, что вы хотите.

2 голосов
/ 20 декабря 2011

Используйте список, а не массив, чтобы позволить вам динамически увеличивать размер selectionFileOrder следующим образом:

 var selectionFileOrder = new List<FileInfo>();
 for (int index = 0; index < dateAllOrder.Length; index++)
 {
      if (dateAllOrder[index].LastAccessTime.Month == DateTime.Now.Month)
      {
           selectionFileOrder.Add(dateAllOrder[index]);
      }
  }

Или же просто используйте LINQ:

var selectionFileOrder = dateAllOrder.Where(o => o.LastAccessTime.Month == DateTime.Now.Month).ToArray();
1 голос
/ 20 декабря 2011

Вам необходимо поместить массив в переменную:

selectionFileOrder = new FileInfo[942];

Обязательно измените 942 на значимое соответствующее число

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...