Ответ 1
Вы можете попробовать следующее:
List<Int32> copy = new List<Int32>(original);
или если вы используете С# 3 и .NET 3.5, с Linq вы можете сделать это:
List<Int32> copy = original.ToList();
Как перенести элементы, содержащиеся в одном List
в другой, в С# без использования foreach
?
Вы можете попробовать следующее:
List<Int32> copy = new List<Int32>(original);
или если вы используете С# 3 и .NET 3.5, с Linq вы можете сделать это:
List<Int32> copy = original.ToList();
Чтобы добавить содержимое одного списка в другой список, который уже существует, вы можете использовать:
targetList.AddRange(sourceList);
Если вы просто хотите создать новую копию списка, см. ответ Lasse.
Для списка элементов
List<string> lstTest = new List<string>();
lstTest.Add("test1");
lstTest.Add("test2");
lstTest.Add("test3");
lstTest.Add("test4");
lstTest.Add("test5");
lstTest.Add("test6");
Если вы хотите скопировать все элементы
List<string> lstNew = new List<string>();
lstNew.AddRange(lstTest);
Если вы хотите скопировать первые 3 элемента
List<string> lstNew = lstTest.GetRange(0, 3);
И это необходимо, если нужно скопировать одно свойство в другой список:
targetList.AddRange(sourceList.Select(i => i.NeededProperty));
Этот метод создаст копию вашего списка, но ваш тип должен быть сериализуемым.
Использование:
List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList();
Метод:
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;
}
ОК, это хорошо работает Из предложений, приведенных выше, GetRange() не работает для меня со списком в качестве аргумента... так что подслащивание немного от сообщений выше: (спасибо всем:)
/* Where __strBuf is a string list used as a dumping ground for data */
public List < string > pullStrLst( )
{
List < string > lst;
lst = __strBuf.GetRange( 0, __strBuf.Count );
__strBuf.Clear( );
return( lst );
}
Здесь другой метод, но он немного хуже, чем другие.
List<int> i=original.Take(original.count).ToList();