как передать объект в метод

Автор Тема: как передать объект в метод  (Прочитано 19994 раз)

0 Пользователей и 10 Гостей просматривают эту тему.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: как передать объект в метод
« Ответ #30 : 17-09-2018, 19:06:51 »
Ваши советы очень ценны! Активно впитываю. Благодарю)
В таком случае тут принято плюсовать карму ;)

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: как передать объект в метод
« Ответ #31 : 17-09-2018, 19:09:52 »
А можно вкратце чем отличается openclosetransaction

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: как передать объект в метод
« Ответ #32 : 17-09-2018, 19:11:24 »
Готово) не знал про эту тему)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: как передать объект в метод
« Ответ #33 : 17-09-2018, 19:15:22 »
А можно вкратце чем отличается openclosetransaction
Погугли по нашему форуму и сайту. Найдёшь много ответов (в том числе и мои). Например:
http://adn-cis.org/forum/index.php?topic=7949.0
http://adn-cis.org/forum/index.php?topic=940.0
P.S. Мы забыли главное правило форума "Один вопрос - одна тема". В этой теме только вопросы по этой теме. Для остальных вопросов создавай новые темы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: как передать объект в метод
« Ответ #34 : 20-09-2018, 20:32:33 »
Несколько комментариев к коду:
1. Куча-мала из объектов транзакций и объектов полученных через ObjectId.GetObject. Я б не стал так рисковать. Это ж работа без транзакций, так? А тогда, объект полученный без транзакции должен быть ликвидирован. Т.е. забыт using
2. MText, полученный из MLeader по документации тоже должен быть ликвидирован. Т.е. тоже берите через using
3. Нет проверки ContentType - на выноске вовсе не обязательно текст, может быть и блок. И тогда надо работать с атрибутами блока. Или менять ContentType
4. И не зачем объявлять переменные типа object.
Код - C# [Выбрать]
  1. object obj = obid.GetObject(OpenMode.ForRead); if (obj is MLeader) {  MLeader ml = obj as MLeader; ...
можно записать как
Код - C# [Выбрать]
  1.  if (tr.GetObject(obid, OpenMode.ForRead) is MLeader ml) {

Поправил по замечаниям и получилось что внутри if еще одно if и более ничего-объеденил все в одно условие.. отсюда вопрос: корректен ли следующий код?
смущает что в одной части условия я только объявляю и присваиваю переменную, а в другой уже ее опрашиваю.. И все внутри одного условия

Код - C# [Выбрать]
  1. if ((tr.GetObject(obid,OpenMode.ForWrite) is MText mt) &&
  2.    (mt.Text.IndexOf(find.Text) >= 0 && (skip.Text == "" || mt.Text.IndexOf(skip.Text) == -1)))
  3. {
  4.        ent.Add(obid);
  5.        infoList.Items.Add(new ListViewItem(new[] { lay.LayoutName, "Мтекст", mt.Text }));
  6.        imt++;
  7. }

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: как передать объект в метод
« Ответ #35 : 20-09-2018, 21:29:53 »
не вижу проблем. абсолютно нормальная практика использовать переменную в том же выражении, где она определена

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: как передать объект в метод
« Ответ #36 : 20-09-2018, 21:32:05 »
код порядком сократился)
спасибо)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: как передать объект в метод
« Ответ #37 : 20-09-2018, 21:44:40 »
simson43,
Только по этому коду не понятно нужно ли OpenMode.ForWrite или было бы достаточно OpenMode.ForRead, так как в нём этот примитив не редактируется.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: как передать объект в метод
« Ответ #38 : 20-09-2018, 21:48:37 »
Поправил по замечаниям и получилось что внутри if еще одно if и более ничего-объеденил все в одно условие.. отсюда вопрос: корректен ли следующий код?
смущает что в одной части условия я только объявляю и присваиваю переменную, а в другой уже ее опрашиваю.. И все внутри одного условия
код корректен, благодаря "is MText mt) &&" т.е. если он MText только тогда будет обращение к свойству mt.Text

Но не зря у тебя сомнения возникли, правильно или нет. Т.к. ты все в один if записал и сделал "плохо читаемый код".
единого совета быть не может как сделать "хорошо читаемый код" но разбив условие например на 2 if и перенеся каждое условие на новую строку ты свой код сделаешь читабельнее.
не экономь на строчках кода или количестве if ;-)

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: как передать объект в метод
« Ответ #39 : 20-09-2018, 22:29:40 »
simson43,
Только по этому коду не понятно нужно ли OpenMode.ForWrite или было бы достаточно OpenMode.ForRead, так как в нём этот примитив не редактируется.
будет редактироваться, это не весь код

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: как передать объект в метод
« Ответ #40 : 21-09-2018, 15:14:04 »
Т.к. ты все в один if записал и сделал "плохо читаемый код".
единого совета быть не может как сделать "хорошо читаемый код"
Есть хорошие рекомендации в книге "Совершенный код" С.Макконнелла. Глава 19.1.

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: как передать объект в метод
« Ответ #41 : 21-09-2018, 16:06:45 »
Почитаю. Спасибо.

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: как передать объект в метод
« Ответ #42 : 23-09-2018, 11:25:47 »
MText mt = ol.MText;
mt.Text = mt.Text.Replace(find.Text, "need.Text");
ol.MText = mt;

наткнулся на Ваши комментарии в похожих темах:
"mt потом неплохо бы освободить (mt.Dispose), а то будет утечка памяти."

выходит после этих моих махинацией тоже следует удалить mt?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: как передать объект в метод
« Ответ #43 : 23-09-2018, 12:12:00 »
выходит после этих моих махинацией тоже следует удалить mt?
Да. Об этом в этой теме уже писал avc:
2. MText, полученный из MLeader по документации тоже должен быть ликвидирован. Т.е. тоже берите через using
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: как передать объект в метод
« Ответ #44 : 23-09-2018, 12:33:35 »
это аналогично mt.Dispose?
Код - C# [Выбрать]
  1. using (MText mt = ol.MText)
  2.         {
  3.  
  4.         }