Здравствуйте, scif, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>А>>Hashtable ht = Hashtable.Synchronized(new Hashtable());
А>>ht.Add(1,1);
А>>ICollection col = (ICollection)ht;
А>>foreach(object de in col)
А>> Console.WriteLine(de.ToString());
А>>
S>
S>Вобщем то и нет ничего удивительно, ведь интерфейс ICollection НЕ ПРЕДОСТАВЛЯЕТ
S>индексного доступа к елементам коллекции, поскольку не смотря на свое обманчивое имя
S>содержит только базовые свойства и методы для всех коллекций.
S>И даже то, что он наследует IEnumerable не дает ему желаемых возможностей, поскольку
S>IEnumerable содержит всего 1 метод GetEnumerator, который, правда, сможет Вам помочь.
S>Но это уже совсем другая история...
Если посмотреть в ildasm, то можно увидеть что
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()
т.е. ICollectoin использует IEnumerable для получение IEnumerator. А вот IEnumerator::get_Current() возвращает ошибку
Current <error: an exception of type: {System.InvalidOperationException} occurred> System.Object
хотя col.Counter = 1.
Такое впечатление что Hashtable этот интерфейс не реализовывает. Если так то зачем его было наследовать ???