ฉันจะถ่ายโอนรายการที่มีในรายการหนึ่งList
ไปอีกรายการหนึ่งใน C # โดยไม่ต้องใช้ได้foreach
อย่างไร
ฉันจะถ่ายโอนรายการที่มีในรายการหนึ่งList
ไปอีกรายการหนึ่งใน C # โดยไม่ต้องใช้ได้foreach
อย่างไร
คำตอบ:
คุณสามารถลองสิ่งนี้:
List<Int32> copy = new List<Int32>(original);
หรือถ้าคุณใช้ C # 3 และ. NET 3.5 กับ Linq คุณสามารถทำได้:
List<Int32> copy = original.ToList();
MyClass
แทนที่จะเป็นInteger
มันก็อปปี้ไอเท็มด้วยหรือแค่อ้างอิงมัน?
lstStudentClass
เป็นIEnumerable<StudentClass>
ก็จะทำงาน หากคุณพบเป็นอย่างอื่นคุณจะต้องให้ข้อมูลเพิ่มเติม
ในการเพิ่มเนื้อหาของรายการหนึ่งไปยังอีกรายการซึ่งมีอยู่แล้วคุณสามารถใช้:
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 );
}
ง่ายต่อการแมปชุดรายการที่แตกต่างโดย linq โดยไม่ต้องห่วง
var List1= new List<Entities1>();
var List2= new List<Entities2>();
var List2 = List1.Select(p => new Entities2
{
EntityCode = p.EntityCode,
EntityId = p.EntityId,
EntityName = p.EntityName
}).ToList();
นี่เป็นอีกวิธีการหนึ่ง แต่ก็แย่กว่ากันเล็กน้อย
List<int> i=original.Take(original.count).ToList();
ToList()
โดยตรง