1

я прочел тему Что такое NullReferenceException, и как мне исправить код?

И конкретно ее ответ Squidward, который являет собой полноценную статью, но для себя я так и не понял что не так.

Регион "разбиение строки s на символы" записывает строку s в массив строк из слов s, а затем в массив в массиве cs[][] записывает в виде знаков.

"Поиск зараженных" находит те слова, в которых имеются повторяющиеся знаки, чтобы можно было (что я еще не реализовал, т.к. не дошел) избавиться в конечном варианте текста от этих "зараженных" слов.

String[] s; //Сплитенный массив строк из слов
Char[][] cs;
String path;
Char b; //буферный знак
Boolean q = false;
...
 #region разбиение строки s на символы 
        s  = textBox_input.Text.Split(' ', ',',',');
        Char[][] cs = new Char [s.Length][];
        for (int j=0;j<s.Length;j++)
            for (int i=0;i< s[j].ToCharArray().Length;i++)
                cs[j] = s[j].ToCharArray();
        #endregion

        #region Определяем зараженных 

        int plaguelistpointer = 0;
        int[] plaguelist = new int[cs.Length];
        for (int j = 0; j < cs.Length; j++)
        {
            plaguelistpointer++;
            for (int k = 0; k < cs[j].Length; k++) 

Вот тут и выскакивает ошибка "System.NullReferenceException" к cs[j].Length. В чуть ранней версии этого кода - "зараженных" определяли как нужно и никаких ошибок.

           {
                if (q) { q = false; break; }
                b = cs[j][k];
                for (int i = 0; i < cs[j].Length; i++)
                {
                    if (b == cs[j][i] && i != k)
                    {
                        plaguelist[plaguelistpointer - 1] = j; //заносим в массив зараженных, номер массива слова.
                        q = true;//отмечаем, что больше по этому слову проходить не нужно
                    }

                }
            }
        }


        #endregion

1 Answers1

1

Проблема в коде

for (int j = 0; j < s.Length; j++)
    for (int i = 0; i < s[j].ToCharArray().Length; i++)
        cs[j] = s[j].ToCharArray();

Внутренний цикл не только не нужен (каждая его итерация делает одно и то же!), но и вреден: при длине строки s[j], равной нулю, он не выполняется ни одного раза, и cs[j] остаётся неприсвоенным.

Пишите так:

for (int j = 0; j < s.Length; j++)
    cs[j] = s[j].ToCharArray();
VladD
  • 206,799