Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Необходимо установить DirectorySearcher. PageSize к ненулевому значению для получения всех результатов.
BTW необходимо также расположить DirectorySearcher, когда Вы закончены с ним
using(var srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps))
{
srch.PageSize = 1000;
var results = srch.FindAll();
}
, документация API не является очень четкой, но по существу:
, когда Вы делаете разбитый на страницы поиск, SizeLimit проигнорирован, и все результаты соответствия возвращаются, поскольку Вы выполняете итерации через результаты, возвращенные FindAll. Результаты будут получены с сервера страница за один раз. Я выбрал значение 1 000 выше, но можно использовать меньшее значение, если предпочтено. Компромисс: использование небольшого PageSize возвратит каждую страницу результатов быстрее, но потребует более частых вызовов к серверу при итерации по большому количеству результатов.
по умолчанию поиск не разбит на страницы (PageSize = 0). В этом случае до SizeLimit результаты возвращается.
Как Biri, на который указывают, важно расположить SearchResultCollection, возвращенный FindAll, иначе у Вас может быть утечка памяти , как описано в разделе Remarks документации MSDN для DirectorySearcher. FindAll.
Один способ помочь избежать это в.NET 2.0 или позже должно записать метод обертки, который автоматически располагает SearchResultCollection. Это могло бы посмотреть что-то как следующее (или мог быть дополнительный метод в.NET 3.5):
public IEnumerable<SearchResult> SafeFindAll(DirectorySearcher searcher)
{
using(SearchResultCollection results = searcher.FindAll())
{
foreach (SearchResult result in results)
{
yield return result;
}
} // SearchResultCollection will be disposed here
}
Вы могли тогда использовать это следующим образом:
using(var srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps))
{
srch.PageSize = 1000;
var results = SafeFindAll(srch);
}