Właśnie zauważyłem, że wielowymiarowa tablica w C#, nie implementuje IEnumerable<T>
, a implementuje IEnumerable
. W przypadku tablic jednowymiarowych zaimplementowane są oba IEnumerable<T>
i IEnumerable
.Dlaczego wielowarstwowe tablice C# nie implementują IEnumerable <T>?
Dlaczego ta różnica? Jeśli tablica wielowymiarowa to IEnumerable
, to z pewnością powinna również implementować ogólną wersję? Zauważyłem to, ponieważ próbowałem użyć metody Extension w wielowymiarowej tablicy, która kończy się niepowodzeniem, chyba że używasz Cast<T>
lub podobnego; więc na pewno widzę argument, że wielowymiarowe macierze implementują IEnumerable<T>
.
Aby wyjaśnić moje pytanie w kodzie, spodziewałbym poniższy kod, aby wydrukować true
cztery razy, podczas gdy faktycznie drukuje 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);
także brzydkie: 'multiDimensional' jest niejawnie zamienny do ** ** non-rodzajowego typu' System.Collections.IList' (po prostu dlatego, że 'System.Array' implementuje ten interfejs). Możesz więc powiedzieć: 'System.Collections.IList mdCast = multiDimensional;'. Następnie użycie indeksatora jednoparametrowego na 'mdCast' zakończy się niepowodzeniem tylko w środowisku wykonawczym. Zobacz [dokument w witrynie MSDN] (http://msdn.microsoft.com/en-us/library/bb494734.aspx). Zwróć uwagę na typ wyjątku, 'ArgumentException'. Naprawdę brzydko. –