По причинам, которые я до сих пор не понимаю (см. этот вопрос SO), многомерные массивы в CLR не реализуют IEnumerable<T>
. Итак, следующее не компилируется:
var m = new int[2,2] {{1, 2}, {3, 4}};
var q = from e in m select e;
Тогда как получилось, что этот отлично работает в VB.NET?
Sub Main()
Dim m(,) As Integer = {{1, 2}, {3, 4}}
Dim q = From e In m Select e
For Each i In q
Console.WriteLine(i)
Next
End Sub
Update:
Следующий код работает, потому что компилятор С# заменяет циклы foreach
на for
для прохождения каждого измерения.
foreach(var e in m)
Console.WriteLine(e);
становится
int[,] numArray3 = new int[,] { { 2, 2 }, { 3, 3 } };
int upperBound = numArray3.GetUpperBound(0);
int num4 = numArray3.GetUpperBound(1);
for (int i = numArray3.GetLowerBound(0); i <= upperBound; i++)
{
for (int j = numArray3.GetLowerBound(1); j <= num4; j++)
{
int num = numArray3[i, j];
Console.WriteLine(num);
}
}