Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
так как Вы используете приложение winforms, если это находится в .net 2.0 существует на самом деле пользовательская система настроек (названный Свойствами), который разработан с этой целью. Эта статья о MSDN имеет довольно хорошее введение в это
, Если Вы все еще волнуетесь по поводу производительности, затем смотрят на SQL Компактный Выпуск , который подобен SQLite, но является предложением Microsoft, которое я нашел играми очень приятно с winforms и существует даже способность к , заставляют его работать с Linq
Проверьте SQLite, он походит на хороший вариант для этого конкретного сценария.
Dylan,
не используют файл конфигурации приложения с этой целью, используют DB SQL (SQLite, MySQL, MSSQL, безотносительно), потому что необходимо будет волноваться меньше о проблемах параллелизма во время чтений и записей к файлу конфигурации.
у Вас также будет лучшая гибкость в типе данных, которые Вы хотите хранить. Раздел appSettings является просто списком ключа/значения, который можно перерасти как передачи времени и поскольку приложение назревает. Вы могли использовать пользовательские разделы конфигурации, но затем Вы в новую проблемную область когда дело доходит до дизайна.
appSettings действительно не предназначен, для какого Вы пытаетесь сделать.
, Когда Ваше приложение.NET запускается, оно читает в app.config файле и кэширует свое содержание в памяти. По этой причине после записи в app.config файл необходимо будет так или иначе вынудить время выполнения повторно проанализировать app.config файл, таким образом, это может кэшировать настройки снова. Это ненужное
, лучший подход должен был бы использовать базу данных для хранения параметров конфигурации.
Запрет использования базы данных, Вы могли легко установить внешний конфигурационный XML-файл. Когда Ваше приложение запускается, Вы могли кэшировать его содержание в объекте NameValueCollection или объекте HashTable. Поскольку Вы изменяетесь/добавляете настройки, Вы сделали бы это к той кэшируемой копии. Когда Ваше приложение закрывается, или в интервале подходящего времени, можно записать содержимое кэша обратно в файл.
Я не использовал бы файлы конфигурации для того, чтобы хранить пользовательские данные. Используйте дб.
Кто-то исправляет меня, если я неправ, но я не думаю, что AppSettings обычно предназначается, чтобы использоваться для подобных параметров конфигурации. Обычно Вы только вставили бы настройки, которые остаются довольно статичными (строки соединения с базой данных, пути к файлам, и т.д.). Если бы Вы хотите сохранить настраиваемые пользовательские настройки, было бы лучше создать отдельный предпочтительный файл или идеально сохранить те настройки в базе данных.
Я мог спросить, почему Вы не сохраняете настройки пользователя в базе данных?
Обычно я сохраняю параметры настройки приложения, которые изменяются очень нечасто в разделе appSettings (журналы ошибок адреса электронной почты по умолчанию отправляются в, число минут, после которых Вы автоматически выходитесь из системы, и т.д.) Объем этого действительно в приложении, не в пользователе, и обычно используется для настроек развертывания.
одна вещь я посмотрел бы на выполнение, кэширует appsettings на чтении, затем сбрасывая настройки от кэша на записи, которая должна минимизировать сумму действующей нагрузки, с которой должен иметь дело сервер для обработки appSettings.
кроме того, если это возможно, взгляд на разбивание appSettings в configSections, таким образом, можно считать запись и связанные с кэшем настройки.
сказавший все это, я серьезно рассмотрел бы рассмотрение хранения этих значений в базе данных, поскольку Вы, кажется, на самом деле храните пользовательские настройки , и не параметры настройки приложения.