Равнозначны ли оба приведённые ниже варианта работы с коллекцией ObjectId или же вариант с ObjectIdCollection имеет какие-то преимущества?Ну как минимум в той форме записи, которую ты указал при выходе из блока using будет вызван items.Dispose(), что явно укажет сборщику мусора, что можно освободить память.
при выходе из блока using будет вызван items.Dispose()Это я понимаю. Не понимаю, зачем этот класс реализует IDisposable. Я предпочитаю использовать List<Db.ObjectId>. В каких случаях мне всё же лучше использовать ObjectIdCollection?
Не понимаю, зачем этот класс реализует IDisposable.Ну это вопрос к инженерной команде AutoCAD.
В каких случаях мне всё же лучше использовать ObjectIdCollection?Мне известно как минимум два случая:
Для совместимости оставили.Скорее для совместимости с ObjectARX (т.е. с native кодом на C++)
Мне известно как минимум два случая:Ну, эти случаи очевидны. Я спрашивал о том, когда мне целесообразней использовать их именно в своём коде.
1) В тех случаях, когда метод явно требует в качестве параметра ObjectIdCollection или возвращает ObjectIdCollection.
2) Когда в силу ограниченности AutoCAD .NET API может понадобится воспользоваться P/Invoke с методом, который получает в качестве параметра AcDbObjectIdArray.
Кстати, AcDbObjectIdArray - это просто динамический массив, элементы которого AcDbObjectId
Я подозреваю, что ObjectIdCollection был во времена .NET 2.0 где еще не было Generic List.Он был еще во времена .NET 1.0 и 1.1 :-)
Скорее для совместимости с ObjectARX (т.е. с native кодом на C++)Спасибо.
Я спрашивал о том, когда мне целесообразней использовать их именно в своём коде.Сравни производительность. Думаю что в собственном коде это будет главным критерием.
Он был еще во времена .NET 1.0 и 1.1 :-)Точно generic? MSDN (http://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.80).aspx) говорит что минимальная версия - 2.0
Точно generic?Нет. Полагаю, что А.Н. имел в виду ObjectIdCollection.
Полагаю, что А.Н. имел в виду ObjectIdCollection.Именно. Этот класс был и в AutoCAD 2005 и 2006, которые использовали .NET 1.0 и .NET 1.1 соотвественно.
Именно. Этот класс был и в AutoCAD 2005 и 2006, которые использовали .NET 1.0 и .NET 1.1 соотвественно.Пардон. Не так понял.
Сначала был ObjectIdCollection, когда появился типизированный список, то стали использовать его.Так как большинство классов и методов этих классов в AutoCAD .NET API (в отличие от Revit API) являются обертками над native классами и их методами в ObjectARX, то с ними по прежнему приходится общаться через ObjectIdCollection, а не через типизированные списки.