คุณสามารถแคสต์List<int>
ให้ได้List<string>
หรือไม่?
ฉันรู้ว่าฉันสามารถวนซ้ำและ. ToString () สิ่งนี้ได้ แต่นักแสดงจะยอดเยี่ยม
ฉันอยู่ใน C # 2.0 (ไม่มีLINQ )
คุณสามารถแคสต์List<int>
ให้ได้List<string>
หรือไม่?
ฉันรู้ว่าฉันสามารถวนซ้ำและ. ToString () สิ่งนี้ได้ แต่นักแสดงจะยอดเยี่ยม
ฉันอยู่ใน C # 2.0 (ไม่มีLINQ )
คำตอบ:
.NET 2.0 มีConvertAll
วิธีการที่คุณสามารถส่งผ่านฟังก์ชันตัวแปลง:
List<int> l1 = new List<int>(new int[] { 1, 2, 3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });
อัปเดตสำหรับปี 2010
List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());
x => x.ToString()
ถูกคอมไพล์เป็น IL ประเภทเดียวกับdelegate(int x) { return x.ToString(); }
ในกรณีนี้สิ่งสำคัญคือต้องมีคอมไพเลอร์ C # (เวอร์ชัน C #) ที่รู้ว่าอะไร=>
คืออะไร เฟรมเวิร์กและรันไทม์ (เวอร์ชัน. NET) ไม่จำเป็นต้องมีคุณสมบัติพิเศษสำหรับสิ่งนี้ดังนั้น. NET 2.0 จึงใช้ได้ที่นี่
<string>
และยังใช้งานได้ ทำให้เพิ่งl1.ConvertAll(x => x.ToString());
C # 2.0 ทำได้List<T>.Convert
หรือไม่? ถ้าเป็นเช่นนั้นฉันคิดว่าการคาดเดาที่ดีที่สุดของคุณคือการใช้สิ่งนั้นกับผู้รับมอบสิทธิ์:
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });
บางสิ่งบางอย่างตามแนวเหล่านั้น
โหวตคำตอบของ Glenn ซึ่งน่าจะเป็นรหัสที่ถูกต้อง ;-)
คุณสามารถใช้ได้:
List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();
คุณจะไม่สามารถแคสต์ได้โดยตรงเนื่องจากไม่มีการร่ายอย่างชัดเจนหรือโดยปริยายจาก int เป็นสตริงมันจะต้องเป็นวิธีการที่เกี่ยวข้องกับ. ToString () เช่น: -
foreach (int i in intList) stringList.Add(i.ToString());
แก้ไข - หรือตามที่คนอื่น ๆ ชี้ให้เห็นว่าค่อนข้างยอดเยี่ยมให้ใช้ intList.ConvertAll (delegate (int i) {return i ToString ();}); อย่างไรก็ตามเห็นได้ชัดว่าคุณยังต้องใช้. ToString () และเป็นการแปลงมากกว่า นักแสดง
int
มีการแปลงเป็นโดยนัยหรือโดยชัดแจ้งstring
แต่ก็ไม่ได้หมายความว่าList<int>
จะมีการแปลงเป็นList<string>
.
คุณต้องสร้างรายการใหม่ การแสดงบิตพื้นฐานของList<int>
และList<string>
เข้ากันไม่ได้อย่างสิ้นเชิงตัวอย่างเช่นบนแพลตฟอร์ม 64 บิตสมาชิกแต่ละคนมีขนาดไม่เท่ากัน
เป็นไปได้ในทางทฤษฎีที่จะปฏิบัติList<string>
กับ a List<object>
- สิ่งนี้จะพาคุณเข้าสู่โลกที่น่าตื่นเต้นของความแปรปรวนร่วมและความแปรปรวนและปัจจุบัน C # หรือ VB.NET ยังไม่รองรับ
result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()
แทนที่ผลลัพธ์ของพารามิเตอร์และ listOfInt เป็นพารามิเตอร์ของคุณ
การแปลงจาก int List เป็น string List สามารถทำได้สองวิธีแบบ adittional นอกเหนือจาก ToString () ตามปกติ เลือกอันที่ถูกใจคุณมากกว่า
var stringlist = intlist.Select(x=>""+x).ToList();
หรือยัง:
var stringlist = intlist.Select(x=>$"{x}").ToList();
และในที่สุดแบบดั้งเดิม:
var stringlist = intlist.Select(x=>x.ToString()).ToList();