2017-02-02 1 views
2

Say, j'ai 3 listesC# Liste AddRange - t-il copier les éléments d'ajouter par référence

List<int> l1 
List<int> l1,l2,l3 

Tous les 3 listes a de nombreux articles Je veux ajouter tous à une seule liste

List<int> finalList 
finalList.AddRange(l1) , similarly for l2 and l3. 

En faisant finalList.AddRange copie-t-il sur les articles de l1, l2, l3 ou fait-il juste référence à ces articles? S'il copie, je veux éviter AddRange pour économiser de la mémoire car les listes sont grandes.

+2

Vous utilisez un nombre entier, donc les valeurs sont copiées. Même s'il copiait simplement une * référence * à l'entier original, la référence elle-même utiliserait de l'espace. – Rob

+0

Si ce n'est pas un int et une classe disent Employé, dites-vous qu'il ne va pas copier les données et faire seulement une ref. Je suis préoccupé par mes usages de la mémoire, c'est pourquoi j'ai soulevé cette question et je veux éviter d'ajouter à la liste finale si elle copie des données. (réduit l'utilisation de la mémoire de moitié). Merci de m'avoir aidé. – PickUpTruck

Répondre

0

Si vous voulez que les références à copier pas les données enveloppent vos listes d'entiers dans une classe comme ce qui suit:

public class ItemsList 
    { 
     public List<int> ListOfInts {get; set;} 

     public ItemsList() 
     { 
      ListOfInts = new List<int>(); 
     } 
    } 

puis les ajouter comme ce qui suit:

 ItemsList l1 = new ItemsList(); 
     l1.ListOfInts = new List<int> { 1, 2, 3, 4, 5, 6 };//or whatever data inside 

     //same for l2, l3 

     List<ItemsList> finalList = new List<ItemsList>(); 
     finalList.Add(l1);//Your adding references to ItemsList class 

Hope this était utile.

+0

Merci Ali. Utile. – PickUpTruck

+0

Votre bienvenue :) –