Возвращает логическое значение из метода

#c# #object #boolean

#c# #объект #логическое

Вопрос:

Я создаю опцию сохранения в своей программе, которая сохраняет изменения в файл. Я использую этот код для сохранения и получения MessageBox , чтобы показать результат процесса. Я получаю сообщение об ошибке в этой строке «Ссылка на объект не установлена для экземпляра объекта».

      SaveFileCheck = StockHandler.SaveChangesToFile();
  

это мой код

     private void Save_Click(object sender, EventArgs e)
    {

        bool SaveFileCheck = false;
        var result = MessageBox.Show("Are you sure you want to Save the changes ?", "My   Application",
      MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
        if (result == DialogResult.Yes)
        {           

                 SaveFileCheck = StockHandler.SaveChangesToFile();
                 if (SaveFileCheck)
                 {
                     MessageBox.Show("The process was a success");
                 }
                 else
                 {
                     MessageBox.Show("The process failed please make sure that the file is not been       used and try again");
                 } 

            //Save the file back


        }
    }
}
}

    public bool SaveChangesToFile() 
    {
        try
        {
            if (FileName != null)
            {
                using (StreamWriter Write = new StreamWriter(FileName, false))
                {
                    foreach (Stock s in FileStockList)
                    {
                        Write.Write(s.ToString()   "rn");

                    }

                }
            }
            else {
                return false;
            }

        }
        catch(IOException ex) 
        {
            return false;
            throw new ArgumentException("something went wrong an error"   ex   "is been cought");

        }
        return true;


    }
  

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

1. StockHandler должно быть null ; вы уверены, что создаете его экземпляр? (например StockHandler = new StockHandler() )

2. StockHandler то есть null назначьте ему экземпляр класса перед вызовом метода для него

3. Какая строка в SaveChangesToFile выбрасывает исключение? Так ли это foreach (Stock s in FileStockList) ? Если это так, то FileStockList все равно null — вы забыли его создать.

4. Что такое FileStockList и где он инициализируется ?

5. Покажите нам первые несколько строк кода для StockHandler .

Ответ №1:

StockHandler равно нулю.

Если StockHandler это не static класс, вам необходимо создать его экземпляр, прежде чем вы сможете вызывать для него методы:

 var handler = new StockHandler();
SaveFileCheck = handler.SaveChangesToFile();
  

Или, если StockHandler является переменной-членом:

 StockHandler = new // something
  

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

1. я отредактировал код, в котором stockhandler является экземпляром stockhelper, для которого используется метод savechangestofile

Ответ №2:

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

Обратите внимание, что это не имеет ничего общего с методом, возвращающим a bool .

Ответ №3:

Может быть, StockHandler это значение равно нулю, или что-то в SaveChangesToFile методе равно нулю или недопустимо.

Редактировать

Смотрите здесь:

 private StockHelper StockHandler;
StockHandler.SaveChangesToFile(); // = bang :(
  

Вам необходимо инициализировать StockHelper экземпляр:

 private StockHelper StockHandler = new StockHelper();
StockHandler.SaveChangesToFile(); // = okay :)
  

Я предполагаю, что этот код не компилируется, что, вероятно, означает, что StockHandler это значение равно нулю. В противном случае ошибка, скорее всего, указывала бы на SaveChangesToFile метод.

Во-вторых, вам либо нужно проглотить исключения в SaveChangesToFile() методе (не рекомендуется), либо вам нужно удалить оператор return и создать исключение. Если вы решите создать исключение, оно определенно не должно быть an ArgumentException , поскольку оно не имеет ничего общего с аргументами, предоставленными методу (или их отсутствием).

Ответ №4:

Что такое stockhandler — ваш метод SaveChangesToFile является методом экземпляра — итак, вы создали экземпляр переменной ‘StockHandler’ для экземпляра любого класса, содержащего метод SaveChangesToFile ();