AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.06.2008, 19:06   #21  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Hyper Посмотреть сообщение
В коде логическая ошибка. Перед iterator.next() необходим else.
На самом деле результат одинаков и так, и так (по крайней мере в 3.0 SP4). Думаю, что класс ListIterator всё сам корректно обрабатывает и не делает казалось бы лишний next для уже удаленного элемента.

Что касается визуального восприятия кода, то добавление else, на мой взгляд, затуманит наглядность, так как глаз привык к шаблону вида:
X++:
while (iterator.more())
{
    // bla-bla-bla

    iterator.next();
}
А пряча продвижение указателя за else, можно потерять уверенность, что будут обойдены все элементы коллекции.
Но в любом случае все претензии по данному фрагменту - авторам "Inside"
Старый 19.06.2008, 13:12   #22  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Цитата:
Сообщение от Gustav Посмотреть сообщение
Думаю, что класс ListIterator всё сам корректно обрабатывает и не делает казалось бы лишний next для уже удаленного элемента.
В том-то и дело, что делает; это достаточно легко проверяется. AX 4.0.

В приведенном примере результат, разумеется, одинаков, но с итератором, стоящим на 300, в цикл мы никогда не попадаем.
Цитата:
Но в любом случае все претензии по данному фрагменту - авторам "Inside"
Ну да. Это я так, на заметку.

Последний раз редактировалось Hyper; 19.06.2008 в 13:15.
Старый 17.07.2008, 14:29   #23  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Цитата:
Сообщение от belugin Посмотреть сообщение
Для пуристов сожно сделать так:
X++:
class ContainerCollection
{  
    container contents;
    Enumerator getEnumerator();
}
Можно перекрыть класс ContainerClass и добавить метод getEnumerator()

X++:
public class MyContainerClass extends ContainerClass
{
    ContainerCollection enumerator;
}

public ContainerCollection getEnumerator()
{
    if (!enumerator)
        enumerator = new ContainerCollection(this.value());    
    return enumerator;
}
Теги
enumerator, iterator, x++, контейнер, полезное

 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:13.