2016-04-26 260 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

回答

3

數組沒有實現IList一個答案,從而使法如.Add()不可用。數組的大小是固定的,所以如果你知道確切的大小,那麼你可以在指定的索引中插入對象。實際上,這很少會發生。

如果讓我來實現這一點,我將使用的LINQ並通過以創建爲集合中的每個成員的新對象使用Select初始訪問集合,讓你與你的情況的IEnumerable<T>T將是SoftwareInfoDTO),您可以輕鬆地將其轉換爲陣列。

例:

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

我想指出的是,除非你正在做一些特殊的低層次的東西,或者正在處理舊的/外部的API,否則通常你不想在C#中處理數組。傾向於公開通用接口。根據我的經驗,當一個方法返回一個數組或List時,應該返回一個IEnumerable的9/10次,因爲客戶端不需要,也不允許對集合進行變異。 – kai