Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: RevitTormentor от 15-12-2017, 20:49:55
-
В чём преимущества Point3dCollection перед ObservableCollection<Point3d>? какие то методы хорошие? Место? Скорость?
-
Не думаю, что есть какие-то преимущества кроме тех, что некоторые методы AutoCAD .NET API работают только с Point3dCollection, т.е. из любой другой коллекции придётся преобразовывать в Point3dCollection.
-
А ObservableCollection - это вообще-то коллекция, в которой реализовано уведомление об изменении коллекции. В основном используется в паттерне MVVM. Поэтому сравнение вообще некорректное!
-
Если мне память не изменяет, то где-то было уже здесь на форуме обсуждение этих встроенных коллекций: DBObjectCollection, Point3dCollection, ObjectIdCollection и т.п. И там пришли к выводу, что List<T> ничем не хуже, а эти коллекции - пережиток из того времени, когда в .NET не было списков.
P.S.: Вот она: http://adn-cis.org/forum/index.php?topic=1072.0
Тут про ObjectIdCollection, но, думаю, для Point3dCollection аналогично.
-
В основном используется в паттерне MVVM. Поэтому сравнение вообще некорректное!
все таки отвечу. Я очень редко использую этот паттерн. Но observareblycollection использую очень часто. Именно из за обновлений. В чем некорректность сравнения?. Хотел узнать в чем разница - узнал. В каких то местах без внутренних коллекций не обойтись. Разве преимущества или недостатки только в уведомлениях?
-
В чем некорректность сравнения?
В том, что ObservableCollection - специфический тип коллекции с возможностью отслеживания изменений. Point3dCollection таким функционалом не обладает, поэтому, и сравнение их некорректно. Если нужно отслеживание изменений, то Point3dCollection совсем никак не подойдёт. В чём тогда смысл вопроса?
-
Так и не пойму в чем некорректность? Вопрос: в чем преимущество? Ответ: преимуществ нет кроме работы с некоторыми методами автокада. ObservableCollection уведомляет, но не работает с некоторыми методами Автокада. Point3dCollection работает с некоторыми методами Автокада но не уведомляет. Счёт 1:1 ничья. Сравнение завершено. Можно сравнить и по другим параметрам есть нет есть нет. А как ещё тогда сравнивают? ObservableCollection с AutomatiUpdateCollection? И КамАЗ с Окой по диаметру колеса уже не сравнить получается?
-
И КамАЗ с Окой по диаметру колеса уже не сравнить получается
Можно, но в чём смысл? Как правило, сравнивают на пригодность для определённой цели. Если уж переходить на метафоры, то тут уместнее сравнение лунохода с автомобилем. Вот как Вы ответите на такой вопрос: "В чём преимущества лунохода перед легковым автомобилем? Какие-то детали хорошие? Расход топлива? Скорость?". Согласитесь, что первой реакцией будет недоумение и попытка объяснить вопрошающему, что как-то не очень корректно их сравнивать, потому что сложно представить условия, когда действительно будет стоять выбор между ними. Если и так не понятно, то я уже не знаю как ещё объяснить...
-
сложно представить условия, когда действительно будет стоять выбор между ними.
Вот тут как раз у меня и встал выбор коллекции. Какую взять? Если у point3dcollection есть преимущества да ещё и существенные в условиях использования Автокада, то я бы стал использовать эту коллекцию. Раз их нет перед observablecollection то использую observablecollection. Там где просто хранение без уведомлений List ещё проще массив. Я конечно не программист, но в моем понимании так. А что касается лунохода. Дмитрий я конечно люблю диспуты, но опять Вы не правы. По диаметру колеса я могу сравнить 14 дюймовое автомобиля с 20 дюймовым лунохода. Да запросто. Сравнение в диаметре а не в предназначении. Что больше 20 или 14 сплошь и рядом такие сравнения в жизни. Болт М16 равен или нет болту М 16 но от другого инструмента. И что:, мы их сравниваем, все схоже только сталь у второго прочнее. Сравнение: в чем преимущество второго болта перед первым? Ответ ни в чем. Только сталь прочнее. Мы можем использовать и первый болт и второй. Можем мы заменить второй болт на первый, если он от другого механизма? Пусть даже от лунохода.
Вы сравнивание луноход и автомобиль. Наверное не корректно с моей стороны было бы сравнивать Net и Autocad API в целом, а сравнить отдельную часть, которая может выполнить нужную функцию но разными методами вполне корректно. А дальше я уже думаю надо автоматически обновлять это или нет.
Если и так не понятно, то я уже не знаю как ещё объяснить...
Тут надо спросить Александра Ривилиса. Как он то понял мой вопрос. Его ответ вполне в контексте моего вопроса, исходя из его опыта и знаний, темы форума и ветки. Как то ведь он понял, или тоже не так понял, а просто ответ совпал с моим видением ответа. Я так понял что он понял вопрос. Я понял его ответ. Все корректно вроде.
-
Если у point3dcollection есть преимущества да ещё и существенные в условиях использования Автокада, то я бы стал использовать эту коллекцию. Раз их нет перед observablecollection то использую observablecollection.
Ну ок, дело хозяйское.
Я конечно не программист
но опять Вы не правы.
:)
Всё, я понял. Ответ Александра Наумовича Вас устроил. Раз вопросов больше нет, то и обсуждать нечего.
-
Я все-же вклинюсь ))
1. Посмотреть разницу между двумя коллекциями можно просто открыв справку и изучив члены. Даже описания читать не надо - в большинстве случаев по названию методов/свойств все понятно
2. Если уж так "припрет", то можно сделать свою собственную коллекцию, реализовав нужный функционал от обоих коллекций
3. Правильнее сначала решить какую задачу вы хотите реализовать, а потом уже спросить какая коллекция для этого лучше подходит (ИМХО)
4. И главный вопрос, который не даст мне спокойно спать - в каком случае (если не для окна и паттерна MVVM) можно использовать ObservableCollection??? Я, если честно, не могу придумать такую ситуацию
-
1 наверное
2 было бы познавательно узнать как это сделать, но наверное ветка форума другая
3 вне зависимости от "внешней" задачи, задача обеих коллекций хранить коллекцию координат точек. Узнав их отличия можно уже решить какую применить. Допустим ситуация я опишу задачу которая в рамках вопроса равна 2% всего функционала. Вы например посоветуете вообще исходя из этой задачи локальной использовать List и будете правы. Но в рамках всего проекта мне это доставит большие трудности в настоящем или будущем. На мой взгляд в контексте моего конкретного затруднения узнав в чем отличия двух коллекций, я куда быстрее решу вопрос и меньше займу времени и Вашего на прочтение описания или изучения карты классов. Хотя наверное в каких то вопросах, что применить c# или c++, polyline2d или polyline3d, наверное надо подробнее. Может ошибаюсь.
4 тут наверное тоже в другой ветке по c# Вам спецы лучше ответят. Я не программист, точных названий могу не знать. То, как я использую называется вроде в контексте. При этом я использую методы buttonclick и прочую пакость.
-
2 было бы познавательно узнать как это сделать, но наверное ветка форума другая
Посмотрите как коллекции сделаны в .NETи попробуйте сделать свою по образу и подобию, но с нужным функционалом.
Вот основные коллекции: https://github.com/dotnet/coreclr/tree/master/src/mscorlib/shared/System/Collections
По поводу ObservableCollection можно начать отсюда - https://github.com/dotnet/corefx/blob/2847e0ec9f7c9ac42d44d2bc8c6fd39e504b7a9b/src/System.ObjectModel/ref/System.ObjectModel.cs