Вернуть логическое значение из метода - PullRequest
1 голос
/ 15 октября 2011

Я делаю опцию сохранения в моей программе, которая сохраняет изменения в файл.Я использую этот код, чтобы сохранить и получить 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() + "\r\n");

                    }

                }
            }
            else {
                return false;
            }

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

        }
        return true;


    }

Ответы [ 4 ]

2 голосов
/ 15 октября 2011

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

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

.
2 голосов
/ 15 октября 2011

StockHandler равно нулю.

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

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

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

StockHandler = new // something
1 голос
/ 15 октября 2011

Возможно, StockHandler равно нулю или что-то в методе SaveChangesToFile равно нулю или неверно.

РЕДАКТИРОВАТЬ

См. Здесь:

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

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

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

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

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

0 голосов
/ 15 октября 2011

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

...