Tôi vừa nhận thấy rằng một mảng đa chiều trong C#, không thực hiện IEnumerable<T>
, trong khi nó thực hiện IEnumerable
. Đối với mảng một chiều, cả hai IEnumerable<T>
và IEnumerable
đều được triển khai.Tại sao C# mảng đa chiều không triển khai IEnumerable <T>?
Tại sao sự khác biệt này? Nếu mảng đa chiều là IEnumerable
, chắc chắn nó cũng nên triển khai phiên bản chung? Tôi nhận thấy điều này bởi vì tôi đã cố gắng sử dụng một phương pháp mở rộng trên một mảng đa chiều, mà không trừ khi bạn sử dụng Cast<T>
hoặc tương tự; vì vậy tôi chắc chắn có thể thấy một đối số để tạo mảng đa chiều thực hiện IEnumerable<T>
.
Để làm rõ câu hỏi của tôi trong mã, tôi mong chờ đoạn mã sau để in true
gấp bốn lần, trong khi nó thực sự in true
, false
, true
, true
:
int[] singleDimensionArray = new int[10];
int[,] multiDimensional = new int[10, 10];
Debug.WriteLine(singleDimensionArray is IEnumerable<int>);
Debug.WriteLine(multiDimensional is IEnumerable<int>);
Debug.WriteLine(singleDimensionArray is IEnumerable);
Debug.WriteLine(multiDimensional is IEnumerable);
Cũng xấu xí: 'multiDimensional' là ngầm mui trần đến ** phi generic ** loại 'System.Collections.IList' (đơn giản vì 'System.Array' thực hiện giao diện đó). Vì vậy, bạn có thể nói 'System.Collections.IList mdCast = multiDimensional;'. Sau đó, sử dụng trình chỉ mục một tham số trên 'mdCast' sẽ không thành công khi chạy. Xem [doc on MSDN] (http://msdn.microsoft.com/en-us/library/bb494734.aspx). Lưu ý kiểu ngoại lệ, 'ArgumentException'. Rất xấu. –