Re[3]: IEnumerable в Hashtable
От: scif  
Дата: 26.12.05 16:28
Оценка: 2 (1) -2
Здравствуйте, Аноним, Вы писали:
А>
А>IL_0020:  callvirt   instance class [mscorlib]System.Collections.IEnumerator [mscorlib]System.Collections.IEnumerable::GetEnumerator()
А>...
А>IL_0029:  callvirt   instance object [mscorlib]System.Collections.IEnumerator::get_Current()
А>


А>
А>    Current    <error: an exception of type: {System.InvalidOperationException} occurred>    System.Object
А>

Не торопитесь.
Дайте посмотрим на Ваш код:
//Создаем синхронизированую хештабличку,на основе пустой
Hashtable ht = Hashtable.Synchronized(new Hashtable());
//Добаляем в нее элемент
ht.Add(1,1);
//Приводим к интерфейсу
ICollection col = (ICollection)ht;
//Создаем энумератор
System.Collections.IEnumerator en=col.GetEnumerator();
//ресетим
en.Reset();
//Получаем текущий
Console.WriteLine(en.Current.ToString());

Только Вы не учли, что добавив в колекцию элемент — Вы ее рассинхронизировали,
а значит и энумератор НЕ ПОМОЖЕТ. Попробуем немножко перестроить ход наших мыслей
//Создаем пустую хештабличку
Hashtable ht = Hashtable();
//Добаляем в нее элемент
ht.Add(1,1);
//Приводим к интерфейсу спеуиального синхронного представителя нашей таблички.
ICollection col = (ICollection)ht.SyncRoot;
//Создаем энумератор
System.Collections.IEnumerator en=col.GetEnumerator();
//ресетим
en.Reset();
//Получаем текущий
Console.WriteLine(en.Current.ToString());

Вот так работает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.