#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 ();