Проверьте, является ли DirectoryEntry последней из группы в Active Directory C#

Здравствуйте, мне нужно проверить, если DirectoryEntry последний из группы в AD. Я не знаю почему, но мой босс говорит, что хочет ящик сообщений. Приведенный ниже метод является лишь небольшой частью моего большого проекта. Что оно делает? Я получаю всех пользователей группы в AD. Каждый пользователь сохраняется в DirectoryEntry, Тогда я звоню другим вещам. Это не имеет отношения к этому вопросу, см. "Do Stuff if de".

Я не знаю, как получить последний элемент, поэтому я положил это:

var lastelement = users.LastElement;

в методе.

    private void Abgleich()
    {
        log.Debug("Abgleich in ActivDirectory aufgerufen");
        using (var context = new PrincipalContext(ContextType.Domain, Properties.Settings.Default.Servername, Properties.Settings.Default.Container))
        {
            using (var group = GroupPrincipal.FindByIdentity(context, Properties.Settings.Default.ECADGruppe))
            {
                if (group == null)
                {
                    log.Error("Group does not exist");
                }
                else
                {
                    var users = group.GetMembers(true);

                    //Pseudo Code
                    var lastelement = users.LastElement;
                    //End Pseudo Code

                    foreach (UserPrincipal user in users)
                    {
                        DirectoryEntry de = (user.GetUnderlyingObject() as DirectoryEntry);
                        // Do Stuff if de
                        if (de == lastelement)
                        {
                            XtraMessageBox.Show("This is the last", "Remember", MessageBoxButtons.YesNo, MessageBoxIcon.Info);
                        }
                    }
                }
            }
        }
    }

1 ответ

Решение

Есть несколько способов найти последний объект в коллекции.

Примечание: Intellisense не будет показывать все методы, если вы будете использовать var вместо classname в объявлениях.

Одним из способов является сохранение последнего объекта коллекции в переменной

  PrincipalSearchResult<Principal> users = group.GetMembers(true);


  UserPrincipal lastuser = (UserPrincipal)users.Last();


  foreach (UserPrincipal user in users)
  {
    //...

    if (user == lastuser)
    {
      // Messagebox
    }
  }

Другой вариант - использовать итеративную переменную

  for (int i = 0; i < users.Count(); i++)
  {       

    if (i == users.Count())
    {
      // .. last user
    }

  }
Другие вопросы по тегам