2012-07-05 36 views
5

Khi tạo webservices, trong C#, tôi đã tìm thấy nó rất hữu ích để vượt qua trở lại mảng lởm chởm, tức là string [] []chuyển đổi List <Danh sách <string[]>> vào string [] [] [] trong C#

Tôi cũng tìm thấy một thủ thuật gọn gàng để xây dựng chúng một cách đơn giản trong mã của tôi, đó là tạo một Danh sách và chuyển đổi nó bằng cách thực hiện một cuộc gọi ToArray().

ví dụ:

public string[][] myws() { 
    List<string[]> output = new List<string[]>(); 
    return output.ToArray(); 
} 

Tôi muốn để có thể sử dụng một giải pháp tương tự, nhưng tôi không thể nghĩ ra cách để làm điều gì đó tương tự với một mảng lởm chởm 3 cấp hoặc string [] [] [], mà không cần đến các vòng lặp và như là.

Trân Martin

Trả lời

6

Bạn có thể đạt được điều đó bằng cách thực hiện một Select() mà chuyển đổi mỗi bên List<string> để một mảng sử dụng ToArray(), và sau đó chuyển đổi những kết quả sử dụng ToArray():

 var x = new List<List<string[]>>(); 

     string[][][] y = x.Select(a => a.ToArray()).ToArray(); 

Và như vậy càng nhiều cấp độ sâu như bạn muốn đi.

+5

để rõ ràng điều này không tránh "vòng lặp và như vậy", nó chỉ chôn vùi việc triển khai các vòng lặp đó bên trong LINQ. đó là câu trả lời đúng mặc dù. –

+0

@RobertLevy: Đúng, nó chỉ * tránh các vòng lặp * theo nghĩa là có hình dáng rõ ràng hơn, nội bộ, vâng nó vẫn còn vòng - tiếc là bất kỳ chuyển đổi nào từ danh sách thành một mảng tại một số điểm thực hiện vòng lặp một cách rõ ràng hoặc ngầm ... –

+0

@RobertLevy: Trên thực tế, 'Danh sách .ToArray()' chỉ cần một 'Array.Copy()' vì lưu trữ cơ bản cho một 'List ' đã là một 'mảng '. –

Các vấn đề liên quan