2-мерные массивы в C # и как вернуть массив - PullRequest
2 голосов
/ 20 августа 2009

У меня проблемы с объявлением двумерных массивов в C #, их заполнением и возвращением массива.

В данный момент я объявляю массив следующим образом:

private static string[,] _programData = new String[50,50];
    public string[,] ProgramData 
    { 
        get 
        { 
            return _programData; 
        } 
    }

_programData показывает ошибку «невозможно неявно преобразовать строку типа» [, ] в строку [] [] '

Я должен указать, что я пытаюсь вызвать ProgramData из другого класса следующим образом:

for (serviceCount = 0; serviceCount <= ffm.Program.Length; serviceCount++)
            {
                Console.WriteLine("Program Number: " + ffm.Program[serviceCount].ToString());
                for (serviceDataCount = 0; serviceDataCount <= ffm.ProgramData.Length; serviceDataCount++)
                {
                    **Console.WriteLine("\t" + ffm.ProgramData[serviceCount, serviceDataCount].ToString());**
                }
            }

Произошла ошибка в жирной строке выше:

Ссылка на объект не установлена ​​для экземпляра объекта.

Я не думаю, что есть проблема с тем, как я объявил массив, это просто несоответствие типов, которое я не понимаю.

Привет

Ответы [ 2 ]

2 голосов
/ 20 августа 2009

Во-первых, вызов ffm.ProgramData.Length вернет 2500 (50 * 50), как указано выше, поэтому вам нужно исправить это значение в ffmProgramData.GetLength (1), чтобы получить размер second измерение.

Во-вторых, возникает ошибка «Ссылка на объект не установлена ​​для экземпляра объекта», поскольку вы ссылаетесь на неинициализированную часть массива. Убедитесь, что массив заполнен или как минимум заполнен пустыми строками (очевидно, вам необходимо запустить этот цикл в конструкторе, изменяя имена переменных там, где это необходимо, поскольку ProgramData читается только так, как она у вас есть):

for(int fDim = 0; fDim < ffm.ProgramData.GetLength(0); fDim++)
    for(int sDim = 0; sDim < ffm.ProgramData.GetLength(1); sDim++)
        ffm.ProgramData[fDim, sDim] = "";

В-третьих, вам не нужно вызывать метод ToString () внутри цикла. Вы приводите строку в строку.

1 голос
/ 20 августа 2009

programData показывает ошибку 'не может неявно преобразовать из типа 'string [, *] to string [] []'

Нет, ошибки не отображаются. Код компилируется просто отлично (с C # 3.5).

...