2016-04-26 2 views
0

Я пытаюсь добавить элемент в массив.Добавить элемент в массив C#

public SoftwareInfoDTO[] GetAllInfo(IPrincipal principal) 
    { 
     Checks.Checks.CheckPrincipal(principal); 

     using (var context = new Context(ConnectionString)) 
     { 
      var allInfo = context.Softwares; 
      SoftwareInfoDTO[] softInfoArray = new SoftwareInfoDTO[] {}; 

      foreach (var elem in allInfo) 
      { 
       SoftwareInfoDTO softInfo = new SoftwareInfoDTO 
       { 
        Id = elem.Id, 
        Name = elem.Name 
       }; 
       softInfoArray.??? <---- NO IDEA 
      } 

      return softInfoArray; 
     } 
    } 

Моя идея состояла в том, чтобы вызвать метод, как «вставить», чтобы добавить элемент в мой массив, но я не нашел что-то полезное.

Затем я реализовал код, записываемый здесь, этот код работает, но мне это не очень нравится, могу ли я использовать только массив без поддержки списка?

Большое спасибо.

public SoftwareInfoDTO[] GetAllInfo(IPrincipal principal) 
    { 
     Checks.Checks.CheckPrincipal(principal); 

     using (var context = new Context(ConnectionString)) 
     { 
      var allInfo = context.Softwares; 

      IList<SoftwareInfoDTO> softInfoArray = new List<SoftwareInfoDTO>(); 
      foreach (var elem in allInfo) 
      { 
       SoftwareInfoDTO softInfo = new SoftwareInfoDTO 
       { 
        Id = elem.Id, 
        Name = elem.Name 
       }; 
       softInfoArray.Add(softInfo); 
      } 

      return softInfoArray.ToArray(); 
     } 
    } 
+5

затем использовать список, вы можете добавлять и удалять из списков – BugFinder

+4

вы не можете изменить емкость массива в C#, как только он был создан. Использовать Список , https://msdn.microsoft.com/en-us/library/6sh2ey19%28v=vs.110%29.aspx –

+0

В чем причина, почему вы хотите использовать массив? – soumer

ответ

0

При использовании массивов вы должны установить размер массива при инициализации.

Вот ответ о том, почему вы хотели бы использовать List<T>https://stackoverflow.com/a/434765/2195005

3

Массивы не реализуют IList, что делает методы, такие как .Add() недоступны. Массив имеет фиксированный размер, поэтому, если вы знаете точный размер, вы можете вставлять объекты в указанные индексы. Реально это случается редко.

Если бы я должен был осуществить это, я использовал бы Linq и перебирать исходную коллекцию с использованием Select для того, чтобы создать новый объект для каждого элемента коллекции, оставив вас с IEnumerable<T> (T в вашем случае будет SoftwareInfoDTO), который вы можете легко преобразовать в массив.

Ex:

return allInfo.Select(elem => 
    new SoftwareInfoDTO 
      { 
       Id = elem.Id, 
       Name = elem.Name 
      }).ToArray(); 
+1

Я бы отметил, что, как правило, вы вообще не хотите иметь дело с массивами на C#, если вы не делаете какие-то специальные материалы низкого уровня или не имеете дело со старыми/внешними API-интерфейсами. Предпочитают раскрывать общие интерфейсы. По моему опыту, 9/10 раза, когда метод возвращает массив или список, он должен вместо этого возвращать IEnumerable, потому что клиенту не нужно и не разрешено мутировать коллекцию. – kai

Смежные вопросы