Проверьте, является ли 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
}
}