Tôi đang tìm kiếm một giải pháp để liệt kê một mảng không xác định ở xếp hạng thời gian biên dịch với quyền truy cập vào mọi bộ chỉ số phần tử. Tôi đã thấy các giải pháp có năng suất nhưng đây là một cách triển khai khác không có năng suất. Đó là theo cách tối giản trường học cũ. Trong ví dụ này, AppendArrayDebug () chỉ in tất cả các phần tử vào bộ đệm StringBuilder.
public static void AppendArrayDebug ( StringBuilder sb, Array array )
{
if( array == null || array.Length == 0 )
{
sb.Append( "<nothing>" );
return;
}
int i;
var rank = array.Rank;
var lastIndex = rank - 1;
var indices = new int[rank];
var lower = new int[rank];
var upper = new int[rank];
for( i = 0; i < rank; ++i )
{
indices[i] = lower[i] = array.GetLowerBound( i );
upper[i] = array.GetUpperBound( i );
}
while( true )
{
BeginMainLoop:
var element = array.GetValue( indices );
sb.AppendLine();
sb.Append( '[' );
for( i = 0; i < rank; ++i )
{
sb.Append( indices[i] );
sb.Append( ' ' );
}
sb.Length -= 1;
sb.Append( "] = " );
sb.Append( element );
for( i = lastIndex; i > 0; )
{
if( ++indices[i] <= upper[i] )
goto BeginMainLoop;
indices[i] = lower[i];
--i;
}
if( ++indices[0] > upper[0] )
break;
}
}
Ví dụ, mảng sau sẽ tạo ra kết quả sau:
var array = new [,,]
{
{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } },
{ { 13, 14, 15 }, { 16, 17, 18 }, { 19, 20, 21 }, { 22, 23, 24 } }
};