รับองค์ประกอบทั้งหมด แต่เป็นองค์ประกอบแรกจากอาร์เรย์


130

มีนิพจน์ linq ง่ายบรรทัดเดียวเพื่อรับทุกอย่างจากอาร์เรย์ธรรมดายกเว้นองค์ประกอบแรกหรือไม่?

for (int i = 1; i <= contents.Length - 1; i++)
    Message += contents[i];

ฉันแค่อยากจะดูว่ามันง่ายกว่าที่จะควบแน่น

คำตอบ:


244

ใช่Enumerable.Skipไม่สิ่งที่คุณต้องการ:

contents.Skip(1)

อย่างไรก็ตามผลลัพธ์คือ IEnumerable <T> หากคุณต้องการรับอาร์เรย์ใช้:

contents.Skip(1).ToArray()

นอกจากนี้ยังเป็นไปได้ที่จะห่อcontentsอาร์เรย์ในตัวอย่างใหม่ของArraySegment<>struct ในขณะที่คำตอบข้างต้นถูกเขียนที่ไม่ได้ประโยชน์อย่างยิ่ง แต่เนื่องจาก .NET 4.5 ArraySegment<>การดำเนินการIList<>, IReadOnlyList<>และการเชื่อมต่อฐานของพวกเขา (รวมIEnumerable<>) เพื่อให้คุณสามารถเช่นผ่านไปArraySegment<> string.Join
Jeppe Stig Nielsen

เท่าที่ฉันเกลียด Linq ฉันตัดสินใจว่าฉันสามารถทนต่อสิ่งนี้ได้เพียงเพราะมันถูกเรียกใช้ในตัวสร้างแบบคงที่หนึ่งครั้งต่อการบู๊ตแอปพลิเคชันดังนั้นค่าใช้จ่ายด้านประสิทธิภาพจึงไม่มีอยู่
Krythic

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.