Primo Chalice Ответов: 2

Как избавиться от ошибки "ссылка на объект не установлена на экземпляр объекта"?


Здравствуйте, я столкнулся с этой проблемой:
Object reference not set to an instance of an object.
.

Я попробовал следующий код, но он не работает. Он продолжает показывать мне эту ошибку.

Пожалуйста помочь.

С уважением
Аман Чаурасия

Что я уже пробовал:

this.Cursor = Cursors.WaitCursor;
                string UnpackDirectory = "";
                string UnpackFile = "";
                string SourceFolder = "";
                UnpackDirectory = System.IO.Path.GetDirectoryName(StructureFileName);
                UnpackFile = System.IO.Path.GetFileNameWithoutExtension(StructureFileName);
                string EpubFolder = "";
                EpubFolder = UnpackDirectory + "\\" + UnpackFile + "_Epub";
                SourceFolder = EpubFolder + "\\OPS";

                string StrBooKTitle = "";
                StrBooKTitle = txt_BookTitle.Text;
                if (Regex.IsMatch(StrBooKTitle, "\n" + "|" + "\r", RegexOptions.Multiline))
                {
                    StrBooKTitle = Regex.Replace(StrBooKTitle, "\n" + "|" + "\r", "", RegexOptions.Multiline);
                }
                if (!string.IsNullOrEmpty(StrBooKTitle.Trim(' ')))
                {
                    if (System.IO.Directory.Exists(SourceFolder))
                    {
                        System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(SourceFolder);
                        System.IO.FileInfo[] dinfo = di.GetFiles("article_*.xml", SearchOption.TopDirectoryOnly);
                        if (dinfo.Length > 0)
                        {
                            Array.Sort(dinfo, new FileNameComparer());
                            string StrSectionHead = "";
                            string StrSectionFoot = "";
                            string StrSectionBody = "";
                            StrSectionHead = StrSectionHead + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "<html xmlns:ncr=\"http://www.nytimes.com/NewsClientReader#\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:nitf=\"http://www.nytimes.com/applicationdata/xml/nitf-3-3.dtd\">" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "<head>" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "<title>" + StrBooKTitle + "</title>" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "<link rel=\"stylesheet\" href=\"css/TablesAndFloats.css\" type=\"text/css\"></link>" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "</head>" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "<body>" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "<div class=\"clean\"/>" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "<div id=\"header\" class=\"masthead\">" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "<!--<img class=\"masthead-img\" src=\"images/###.jpg\" alt=\"Images\"/>-->" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "<div class=\"sectionName\">" + TitleTextBox.Text + "</div>" + Environment.NewLine;

                            string dDate = "";
                            string dMonth = "";
                            string dYear = "";
                            dDate = DateTime.Now.Day.ToString();
                            if (dDate.Length == 1)
                            {
                                dDate = "0" + dDate;
                            }
                            dMonth = DateTime.Now.Month.ToString();
                            if (dMonth.Length == 1)
                            {
                                dMonth = "0" + dMonth;
                            }
                            dYear = DateTime.Now.Year.ToString();
                            StrSectionHead = StrSectionHead + "<div id=\"header_date\" class=\"masthead-date\">" + dYear + "-" + dMonth + "-" + dDate + "</div>" + Environment.NewLine;
                            StrSectionHead = StrSectionHead + "</div>" + Environment.NewLine;

                            StrSectionFoot = StrSectionFoot + "<div class=\"article-spacer\"/>" + Environment.NewLine;
                            StrSectionFoot = StrSectionFoot + "</body>" + Environment.NewLine;
                            StrSectionFoot = StrSectionFoot + "</html>";
                            int ArticleBodyCount = 1;

                            string[] TempSectionStringArray = null;
                            string TempSectionString = "";
                            string[] TempSectionTitleArray = null;
                            string TempSectionTitleString = "";
                            int TSection = 0;
                            int TLastSection = 0;
                            string TArticle = "";
                            if (DataGridView1.RowCount > 0)
                            {
                                for (var irow = 0; irow < DataGridView1.RowCount; irow++)
                                {
                                    if (DataGridView1.Rows[irow].Cells[0].Value != null)
                                    {
                                        if (Convert.ToString(DataGridView1.Rows[irow].Cells[2].Value) == "article-full-headline")
                                        {
                                            if (TLastSection != TSection)
                                            {
                                                TLastSection = TSection;
                                                if (string.IsNullOrEmpty(TempSectionString))
                                                {
                                                    TempSectionString = TempSectionString + TSection + "|" + "article_" + DataGridView1.Rows[irow].Cells[0].Value + "-" + DataGridView1.Rows[irow].Cells[1].Value;
                                                }
                                                else
                                                {
                                                    TempSectionString = TempSectionString + Environment.NewLine + TSection + "|" + "article_" + DataGridView1.Rows[irow].Cells[0].Value + "-" + DataGridView1.Rows[irow].Cells[1].Value;
                                                }
                                                TArticle = "article_" + DataGridView1.Rows[irow].Cells[0].Value + "-" + DataGridView1.Rows[irow].Cells[1].Value;
                                            }
                                            else if (TArticle != "article_" + DataGridView1.Rows[irow].Cells[0].Value + "-" + DataGridView1.Rows[irow].Cells[1].Value)
                                            {
                                                if (string.IsNullOrEmpty(TempSectionString))
                                                {
                                                    TempSectionString = TempSectionString + TSection + "|" + "article_" + DataGridView1.Rows[irow].Cells[0].Value + "-" + DataGridView1.Rows[irow].Cells[1].Value;
                                                }
                                                else
                                                {
                                                    TempSectionString = TempSectionString + Environment.NewLine + TSection + "|" + "article_" + DataGridView1.Rows[irow].Cells[0].Value + "-" + DataGridView1.Rows[irow].Cells[1].Value;
                                                }
                                                TArticle = "article_" + DataGridView1.Rows[irow].Cells[0].Value + "-" + DataGridView1.Rows[irow].Cells[1].Value;
                                            }
                                        }
                                        else if (Convert.ToString(DataGridView1.Rows[irow].Cells[2].Value) == "sectionName")
                                        {
                                            TSection = TSection + 1;
                                            if (string.IsNullOrEmpty(TempSectionTitleString))
                                            {
                                                TempSectionTitleString = TempSectionTitleString + TSection + "|" + Convert.ToString(DataGridView1.Rows[irow].Cells[4].Value).Trim(' ');
                                            }
                                            else
                                            {
                                                TempSectionTitleString = TempSectionTitleString + Environment.NewLine + TSection + "|" + DataGridView1.Rows[irow].Cells[3].Value;
                                            }
                                        }
                                        else
                                        {
                                            continue;
                                        }
                                    }
                                }
                            }
                            if (TSection == 0)
                            {
                                foreach (var ArticleFile in dinfo)
                                {
                                    try
                                    {
                                        string tstrFileContent = "";
                                        tstrFileContent = Common.ReadFile(ArticleFile.FullName);
                                        StrSectionBody = StrSectionBody + "<div class=\"article-spacer\"/>" + Environment.NewLine;
                                        StrSectionBody = StrSectionBody + "<div id=\"preview_" + ArticleBodyCount + "\" class=\"sectionArticleBlockOdd\">" + Environment.NewLine;
                                        StrSectionBody = StrSectionBody + "<div class=\"sectionArticleTextBlock\">" + Environment.NewLine;
                                        StrSectionBody = StrSectionBody + "<div class=\"sectionArticleTitle\">" + Environment.NewLine;
                                        StrSectionBody = StrSectionBody + "<a class=\"sectionArticleLink\" href=\"" + ArticleFile.Name + "\">" + Environment.NewLine;
                                        string ArticleHeadTitle = "";
                                        if (Regex.IsMatch(tstrFileContent, "<h2 id=.+>(.+?)</h2>", RegexOptions.Multiline))
                                        {
                                            ArticleHeadTitle = Regex.Match(tstrFileContent, "<h2 id=.+>(.+?)</h2>", RegexOptions.Multiline).Groups[1].Value;
                                        }
                                        StrSectionBody = StrSectionBody + "<span id=\"preview_" + ArticleBodyCount + "_headline\" class=\"sectionArticleHeadline\">" + ArticleHeadTitle + "</span>" + Environment.NewLine;
                                        StrSectionBody = StrSectionBody + "</a>" + Environment.NewLine;
                                        StrSectionBody = StrSectionBody + "<div id=\"preview_" + ArticleBodyCount + "_byline\" class=\"sectionArticleByline\"/>" + Environment.NewLine;
                                        string ArticleHeadBody = "";
                                        if (Regex.IsMatch(tstrFileContent, "<p class=\"article-full-body\">(.+?)</p>", RegexOptions.Multiline))
                                        {
                                            ArticleHeadBody = Regex.Match(tstrFileContent, "<p class=\"article-full-body\">(.+?)</p>", RegexOptions.Multiline).Groups[1].Value;
                                            if (ArticleHeadBody.Length > 50)
                                            {
                                                ArticleHeadBody = ArticleHeadBody.Substring(0, 50);
                                            }
                                        }
                                        StrSectionBody = StrSectionBody + "<div id=\"preview_" + ArticleBodyCount + "_snippet\" class=\"sectionArticleBody\">" + ArticleHeadBody + "...</div>" + Environment.NewLine;
                                        StrSectionBody = StrSectionBody + "</div>" + Environment.NewLine;
                                        StrSectionBody = StrSectionBody + "</div>" + Environment.NewLine;
                                        StrSectionBody = StrSectionBody + "</div>" + Environment.NewLine;
                                        ArticleBodyCount = ArticleBodyCount + 1;
                                    }
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show(ex.ToString(), "Error Sections", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    }
                                }
                                StrSectionBody = StrSectionHead + StrSectionBody + StrSectionFoot;
                                Common.WriteFile(SourceFolder + "\\" + "section.xml", StrSectionBody);
                                btn_Sections.ForeColor = System.Drawing.Color.Red;
                                MessageBox.Show("Completed Sections", "ePUB Sections", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                            else
                            {
                                bool SectionsWritten = false;
                                for (var icm = 0; icm <= TempSectionTitleArray.Length; icm++)
                                {
                                    if (!string.IsNullOrEmpty(TempSectionTitleArray[icm]))
                                    {
                                        int tSectionNo = Convert.ToInt32(Regex.Match(TempSectionTitleArray[icm], "(.+)\\|").Groups[1].Value);
                                        string tSectionTitle = (Regex.Match(TempSectionTitleArray[icm], "\\|(.+)").Groups[1].Value).Trim(' ');

                                        string TStrSectionHead = "";
                                        TStrSectionHead = StrSectionHead;
                                        TStrSectionHead = Regex.Replace(TStrSectionHead, "<div class=\"sectionName\">###</div>", "<div class=\"sectionName\">" + tSectionTitle + "</div>", RegexOptions.Multiline);

                                        for (var ic = 0; ic < TempSectionStringArray.Length; ic++)
                                        {
                                            if (!string.IsNullOrEmpty(TempSectionStringArray[ic]))
                                            {
                                                string ArticleSectionTitleNo = Convert.ToInt32(Regex.Match(TempSectionStringArray[ic], "(.+)\\|").Groups[1].Value).ToString();
                                                if (ArticleSectionTitleNo == tSectionNo.ToString())
                                                {
                                                    string ArticleFileStr = Regex.Match(TempSectionStringArray[ic], "\\|(.+)").Groups[1].Value;
                                                    foreach (var ArticleFile in dinfo)
                                                    {
                                                        string tArtName = null;
                                                        tArtName = ArticleFile.Name;
                                                        if (tArtName.Contains(ArticleFileStr))
                                                        {
                                                            try
                                                            {
                                                                //===========================================
                                                                string tstrFileContent = "";
                                                                tstrFileContent = Common.ReadFile(ArticleFile.FullName);
                                                                StrSectionBody = StrSectionBody + "<div class=\"article-spacer\"/>" + Environment.NewLine;
                                                                StrSectionBody = StrSectionBody + "<div id=\"preview_" + ArticleBodyCount + "\" class=\"sectionArticleBlockOdd\">" + Environment.NewLine;
                                                                StrSectionBody = StrSectionBody + "<div class=\"sectionArticleTextBlock\">" + Environment.NewLine;
                                                                StrSectionBody = StrSectionBody + "<div class=\"sectionArticleTitle\">" + Environment.NewLine;
                                                                StrSectionBody = StrSectionBody + "<a class=\"sectionArticleLink\" href=\"" + ArticleFile.Name + "\">" + Environment.NewLine;
                                                                string ArticleHeadTitle = "";
                                                                if (Regex.IsMatch(tstrFileContent, "<h2 id=.+>(.+?)</h2>", RegexOptions.Multiline))
                                                                {
                                                                    ArticleHeadTitle = Regex.Match(tstrFileContent, "<h2 id=.+>(.+?)</h2>", RegexOptions.Multiline).Groups[1].Value;
                                                                }
                                                                StrSectionBody = StrSectionBody + "<span id=\"preview_" + ArticleBodyCount + "_headline\" class=\"sectionArticleHeadline\">" + ArticleHeadTitle + "</span>" + Environment.NewLine;
                                                                StrSectionBody = StrSectionBody + "</a>" + Environment.NewLine;
                                                                StrSectionBody = StrSectionBody + "<div id=\"preview_" + ArticleBodyCount + "_byline\" class=\"sectionArticleByline\"/>" + Environment.NewLine;
                                                                string ArticleHeadBody = "";
                                                                if (Regex.IsMatch(tstrFileContent, "<p class=\"article-full-body\">(.+?)</p>", RegexOptions.Multiline))
                                                                {
                                                                    ArticleHeadBody = Regex.Match(tstrFileContent, "<p class=\"article-full-body\">(.+?)</p>", RegexOptions.Multiline).Groups[1].Value;
                                                                    if (ArticleHeadBody.Length > 50)
                                                                    {
                                                                        ArticleHeadBody = ArticleHeadBody.Substring(0, 50);
                                                                    }
                                                                }
                                                                StrSectionBody = StrSectionBody + "<div id=\"preview_" + ArticleBodyCount + "_snippet\" class=\"sectionArticleBody\">" + ArticleHeadBody + "...</div>" + Environment.NewLine;
                                                                StrSectionBody = StrSectionBody + "</div>" + Environment.NewLine;
                                                                StrSectionBody = StrSectionBody + "</div>" + Environment.NewLine;
                                                                StrSectionBody = StrSectionBody + "</div>" + Environment.NewLine;
                                                                ArticleBodyCount = ArticleBodyCount + 1;
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                MessageBox.Show(ex.ToString(), "Error Sections", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                                            }
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    break;
                                                }
                                            }
                                        }
                                        StrSectionBody = TStrSectionHead + StrSectionBody + StrSectionFoot;
                                        Common.WriteFile(SourceFolder + "\\" + "section" + tSectionNo + ".xml", StrSectionBody);
                                        StrSectionBody = "";
                                        SectionsWritten = true;
                                    }
                                }
                                if (SectionsWritten == true)
                                {
                                    btn_Sections.ForeColor = System.Drawing.Color.Red;
                                    MessageBox.Show("Completed Sections", "ePUB Sections", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                                else
                                {
                                    MessageBox.Show("Sections not Complete", "Error Sections", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show("Articles Not Found, Generate and Try again", "Error Sections", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Structure Not Generated, Generate and Try Again", "Error Sections", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show("Book Title Blank", "Error Sections", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                this.Cursor = Cursors.Default;
                btn_Toc.Enabled = true;

2 Ответов

Рейтинг:
1

Jinto Jacob

это может произойти, когда вы пытаетесь использовать нулевой объект, как если бы это был объект с правильной ссылкой. В большинстве случаев, когда вы пытаетесь ассинговать значение в объект, и если значение равно null, то возникает такое исключение.

попробуйте поставить точки останова на коде и найти объект с нулевым значением.

вы можете проверить этот аналогичный вопрос

ссылка на объект c# не установлена на экземпляр ошибки объекта


Primo Chalice

Dim TempSectionTitleArray как String() в Visual Basic
string[] TempSectionTitleArray = null; в C#

Код Visual Basic работает нормально, без ошибок, но он показывает ошибку в C#.

Я использовал "string[] TempSectionTitleArray = new string[0];" но тогда ошибка заключалась в том, что "индекс находился за пределами массива."

Jinto Jacob

вы пытаетесь получить доступ к индексу в массиве, который недоступен.

например, если вы попытаетесь получить доступ к 4-му элементу в массиве размера 2, это произойдет.

Primo Chalice

Но тогда как это работает в Visual Basic?

Jinto Jacob

эквивалент
Dim TempSectionTitleArray As String() is

string[] TempSectionTitleArray;

попробуйте вместо string[] TempSectionTitleArray = new string[0]

Primo Chalice

Я действительно пытался это сделать. У меня есть линия после этого

for (var icm = 0; icm < TempSectionTitleArray.Длина; icm++)

Здесь говорится: "Использование неназначенной локальной переменной"

Рейтинг:
0

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, в которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!


Primo Chalice

Dim TempSectionTitleArray как String() в Visual Basic
string[] TempSectionTitleArray = null; в C#

Код Visual Basic работает нормально, без ошибок, но он показывает ошибку в C#.

Я использовал "string[] TempSectionTitleArray = new string[0];" но тогда ошибка заключалась в том, что "индекс находился за пределами массива."