Логическая ошибка foreach Web.webs - PullRequest
1 голос
/ 30 декабря 2011

Я пытаюсь выполнить итерацию по каждой сети и ее веб-сайтам, чтобы получить список дочерних сетей и т. Д., Но проблема в том, что когда итерация попадает в сеть, которая не имеет никаких суб-сетей, она выдает исключение

Ссылка на объект не установлена ​​для экземпляра объекта

Код здесь

  private void dwnEachWeb(SPWeb TopLevelWeb)
    {
        if (TopLevelWeb.Webs != null)
        {
            dwnEachList(TopLevelWeb);
        }
        foreach (SPWeb ChildWeb in TopLevelWeb.Webs)
        {
            dwnEachWeb(ChildWeb);
            ChildWeb.Dispose();
        }
    }

Я даже пытался "если (TopLevelWeb.Webs.Counts == 0)", но проблема в том, что когда не будет никаких веб-страниц, то как программа будет проверять, равен нулю или нулю, интересно, есть ли способ, которым я могу проверить, есть ли в сети коллекция веб-сайтов, например, могу ли я проверить, существует ли web.webs.

1 Ответ

1 голос
/ 30 декабря 2011

Вы получите исключение нулевой ссылки, когда TopLevelWeb.Webs оценивается как ноль.Так что попробуйте:

private void dwnEachWeb(SPWeb TopLevelWeb)
{
    if (TopLevelWeb != null && TopLevelWeb.Webs != null)
    {
        dwnEachList(TopLevelWeb);

        foreach (SPWeb ChildWeb in TopLevelWeb.Webs)
        {
            dwnEachWeb(ChildWeb);
            ChildWeb.Dispose();
        }
    }
}

Это делает foreach только если TopLevelWeb и TopLevelWeb.Webs не равны нулю.

...