Nhận tất cả các yếu tố nhưng đầu tiên từ một mảng


130

Có một biểu thức linq dễ dàng một dòng để chỉ nhận mọi thứ từ một mảng đơn giản ngoại trừ phần tử đầu tiên không?

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

Tôi chỉ muốn xem nếu nó dễ ngưng tụ hơn.

Câu trả lời:


244

Có, EnSable.Skip làm những gì bạn muốn:

contents.Skip(1)

Tuy nhiên, kết quả là một <T> IEn, nếu bạn muốn sử dụng mảng:

contents.Skip(1).ToArray()

Cũng có thể bọc contentsmảng trong một thể hiện mới của ArraySegment<>struct. Vào thời điểm đó là câu trả lời ở trên được viết ra, đó không phải là đặc biệt hữu ích, nhưng kể từ NET 4.5 các ArraySegment<>dụng cụ IList<>, IReadOnlyList<>và giao diện cơ sở của họ (bao gồm IEnumerable<>), do đó bạn có thể ví dụ như vượt qua một ArraySegment<>tới string.Join.
Jeppe Stig Nielsen

Tôi ghét Linq nhiều như vậy, tôi quyết định tôi có thể chịu đựng điều này, chỉ vì nó được chạy trong một hàm tạo tĩnh, một lần cho mỗi lần khởi động ứng dụng, do đó, chi phí hiệu năng là không tồn tại.
Krythic

7

Sau đây sẽ tương đương với forvòng lặp của bạn :

foreach (var item in contents.Skip(1))
    Message += item;

1
bạn đã muốn var item??
Joe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.