Проверка наличия пользовательского своства в PropertySets.

Автор Тема: Проверка наличия пользовательского своства в PropertySets.  (Прочитано 4586 раз)

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

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Доброго времени суток, уважаемые форумчане. Прошу вашей помощи в решении такой вот задачи:
В свойствах некоторых деталей в сборке я добавил пользовательское свойство с именем, например ID. И задал свойству какое-то значение. Это значение необходимо для идентификации деталей, с последующими манипуляциями над ними. Создавать такое свойство во всех деталях нет смысла, так как это пустая трата времени. А если не создавать, то при попытке считывания несуществующего свойства (в деталях, где оно не создано) возникает ошибка. Не могу разобраться как (если это возможно) проверить, существует ли в детали пользовательское свойство с каким-либо именем, например:
Код - C# [Выбрать]
  1.  oDoc.PropertySets["Inventor User Defined Properties"]["ID"]
Я понимаю, что наверно могу перебирать каждый раз коллекцию PropertySets и проверять вхождения на соответствие имени ID, но не существует ли какого-то более простого способа?
В программировании я новичок...но ненадолго! ;)

Отмечено как Решение R.I.Chernov 20-07-2016, 11:47:45

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
вот для поиска PropertySet существует метод
PropertySets.PropertySetExists

А для конкретного свойства такого метода нет, поэтому всего два варианта:

1. поиск перебором
2. поиск через перехват ошибки

Если сборки крупные то может подтормаживать, по скольку в NET и массивный перебор требует времени и перехват ошибки тоже жрет ресурс.
С++ конечно рулит, т.к. функции в С++ обычно возвращают значение по которому как раз и определяется успешно функция выполнена или нет, при это скорость работы большая.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Спасибо, Михаил. Жаль конечно что аналогичного свойства нет для свойств, извиняюсь за тавтологию. :) Придется работать перебором.
П.С. Копаясь в объектном браузере, наткнулся на свойство Property.Dirty ... случайно не знаете, как оно работает?
В программировании я новичок...но ненадолго! ;)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Property.Dirty ... случайно не знаете, как оно работает?
Ну в хэлпе написано, что оно будет равно true если свойство было создано или отредактировано в течении данного сеанса работы с данным документом. Есть похожее свойство для документа Document.Dirty, по нему можно судить нуждается ли документ в сохранении на винчестер или нет.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Ааа, разговор идёт про текущий сеанс. Спасибо. Теперь понятно, а то вроде в детали свойство создано, а оно  мне фолс возвращает.
В программировании я новичок...но ненадолго! ;)