Как насчет игры на этом? Уникальные случайные числа, не будучи должен использовать Набор или Хеш.
x = 0
(1..100).map{|iter| x += rand(100)}.shuffle
Кажется, что проблема вызвана созданием DirectoryEntry из NativeObject в AdUser. Когда я изменил AdUser с:
public class AdUser : DirectoryEntry
{
public AdUser(DirectoryEntry entry)
: base(entry.NativeObject)
{
}
}
и создал обертку, которая рассматривает DirectoryEntry как компонент:
public class ActiveDirectoryObject : IDisposable
{
private bool disposed;
public DirectoryEntry Entry { get; protected set; }
public ActiveDirectoryObject(DirectoryEntry entry)
{
Entry = entry;
}
public void CommitChanges()
{
Entry.CommitChanges();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
if (Entry != null) Entry.Dispose();
}
disposed = true;
}
}
}
public class AdUser : ActiveDirectoryObject
{
public AdUser(DirectoryEntry entry)
: base(entry)
{
}
}
Тогда я не понимаю этих ошибок. Дальнейшие подробности здесь: http://directoryprogramming.net/forums/thread/7171.aspx
Да, возможно, объект DirectoryEntry удален из-за сборки мусора. Сборщик мусора работает в собственном потоке, поэтому возможна гонка при очистке RCW.
Попытайтесь сохранить ссылку на него в своем объекте AdUser. Т.е. должно получиться так
public class AdUser : DirectoryEntry
{
DirectoryEntry entry;
public AdUser(DirectoryEntry entry) : base(entry.NativeObject)
{
this.entry = entry;
}
...
}