как объявить двумерный массив

#c# #.net #multidimensional-array

#c# #.net #многомерный массив

Вопрос:

У меня есть этот код:

 var test = new string[3, 2];
            for (int i=0; i<3; i  )
            {
                for (int h=0; h<2; h  )
                {
                    test[i, h] = "DataRows: "   i.ToString()   " "   h.ToString();
                }
            }
 

но когда я пытаюсь увидеть, что внутри теста, я вижу это

быстрый просмотр

Если я пытаюсь посмотреть, что находится в любом элементе массива, я получаю сообщение об ошибке:

ошибка в элементе в массиве

Может кто-нибудь объяснить мне, что я делаю не так и каков правильный путь?

Visual Studio 2022, Blazor Webassembly, .NET6.0

Спасибо

Комментарии:

1. откуда вы получаете эту информацию? Если это на самом деле набор данных из базы данных, то бывают ситуации, когда окно отладчика не отображает правильную информацию

2. Как вы можете видеть, данные создаются как таковые. Это происходит не из базы данных, а из самого кода. первый и второй скриншоты взяты из опции «быстрый просмотр» в Visual Studio. Как бы вы отладили это правильно?

3. вы уверены, что скриншоты соответствуют конечному результату (после прохождения всего цикла) вашего кода? я быстро прогнал ваш образец, и мой результат содержит 6 записей, как и следовало ожидать.

Ответ №1:

В вашем коде нет ничего плохого, и ваша проблема не имеет ничего общего с массивами. Проверьте настройки отладки Blazor. Попробуйте использовать разные браузеры и проверьте, где вы установили точку останова.

Если вы посмотрите на свой скриншот, вы заметите исключение VSCodeDebugProtocol.ProtocolException — следуйте за исключением.

Вот скриншот вашего цикла, полностью функционального при отладке простого консольного приложения. Проблема не в вашем коде — это ваше состояние отладки. скриншот отладки консоли

Ответ №2:

C # поддерживает многомерные массивы, а также так называемые зубчатые массивы

Следующий пример кода показывает, как использовать их оба

 using System;

namespace Test
{
    class Program
    {
        static void Main()
        {
            // Multidimensional array  

            string[,] multidimensionalArray = { { "alpha", "beta", "gamma" }, { "delta", "epsilon", "zeta" } };

            for (int x = 0; x < multidimensionalArray.GetLength(0); x  )
            {
                for (int y = 0; y < multidimensionalArray.GetLength(1); y  )
                {
                    Console.WriteLine(multidimensionalArray[x, y]);
                }
            }

            // Jagged array 

            string[][] jaggedArray = { new string[] { "alpha", "beta", "gamma" }, new string[] { "delta", "epsilon", "zeta" } };

            for (int x = 0; x < jaggedArray.Length; x  )
            {
                for (int y = 0; y < jaggedArray[x].Length; y  )
                {
                    Console.WriteLine(jaggedArray[x][y]);
                }
            }

        }

    }
}

 

Для получения дополнительной информации, пожалуйста, смотрите

Фабио

Ответ №3:

В качестве альтернативы вы могли List бы проще использовать тип данных с foreach циклом:

 using System.Collections.Generic;
 

Сначала добавьте приведенную выше ссылку

 List<List<string>> list = new List<List<string>>();

list.Add(new List<string>(){"aaa", "bbb"});
list.Add(new List<string>(){"ccc", "ddd"});

foreach(var i in list)//outer list
{
    foreach(string j in i)//inner list
    {
       //your code here
        Console.WriteLine(j);
    }
}