Comment transférer les éléments contenus dans un List
à un autre en C# sans utiliser foreach
?
Si les éléments sont de type MyClass
au lieu de Integer
Est-ce qu'il copie aussi les éléments, ou est-ce qu'il les référence simplement ?
Comment transférer les éléments contenus dans un List
à un autre en C# sans utiliser foreach
?
Vous pouvez essayer ceci :
List<Int32> copy = new List<Int32>(original);
ou si vous utilisez C# 3 et .NET 3.5, avec Linq, vous pouvez faire ceci :
List<Int32> copy = original.ToList();
Je vois que cette réponse reçoit encore des votes positifs. Eh bien, voici un secret pour toi : la réponse ci-dessus utilise toujours un foreach . S'il vous plaît ne pas upvote ce plus loin.
Si les éléments sont de type MyClass
au lieu de Integer
Est-ce qu'il copie aussi les éléments, ou est-ce qu'il les référence simplement ?
Ne fonctionne pas avec les types non primitifs. List<StudentClass> copy = nouvelle List<StudentClass>(lstStudentClass) ;
Il fonctionne avec tous les types, à condition que lstStudentClass
est un IEnumerable<StudentClass>
il fonctionnera. Si vous rencontrez d'autres problèmes, vous devez fournir plus d'informations.
@mrmillsy : Ils font des choses différentes. Ma réponse est axée sur "J'ai déjà une liste, et je veux y copier des choses".
Vrai. Ma question serait probablement mieux adaptée à une nouvelle question de toute façon. Merci quand même pour la réponse.
Si vous vouliez remplacer complètement le contenu d'une liste existante, vous appelleriez d'abord targetList.Clear().
Pour une liste d'éléments
List<string> lstTest = new List<string>();
lstTest.Add("test1");
lstTest.Add("test2");
lstTest.Add("test3");
lstTest.Add("test4");
lstTest.Add("test5");
lstTest.Add("test6");
Si vous voulez copier tous les éléments
List<string> lstNew = new List<string>();
lstNew.AddRange(lstTest);
Si vous voulez copier les 3 premiers éléments
List<string> lstNew = lstTest.GetRange(0, 3);
Cette méthode va créer une copie de votre liste mais votre type doit être sérialisable.
Utilisez :
List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList();
Méthode :
public static List<T> CopyList<T>(this List<T> lst)
{
List<T> lstCopy = new List<T>();
foreach (var item in lst)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, item);
stream.Position = 0;
lstCopy.Add((T)formatter.Deserialize(stream));
}
}
return lstCopy;
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
3 votes
Si vous avez besoin d'un clone profond de la liste originale, vous trouverez la réponse dans cette question connexe : stackoverflow.com/questions/222598/