Nano Hash - криптовалюты, майнинг, программирование

Передовой опыт: обработка несуществующих свойств

Обычный шаблон, который я вижу в примерах сценариев PowerShell, выглядит примерно так:

If ($object.property -ne $true) {  
    $object.property = $true   
}

Но это не решает ситуацию, когда конкретный экземпляр $object не включает свойство, и в этом случае произойдет ошибка. Я столкнулся с этим специально при переборе сетевых адаптеров для включения WOL, а адаптер его не поддерживает. В любом случае одним из подходов было бы использование Try/Catch, но я считаю, что исключений следует избегать, если есть способ проверить вещи заранее. Итак, правильно ли я считаю, что Try/Catch должен быть последним средством? Или в PowerShell нормально использовать Try/Catch в качестве основного метода устранения ошибок? И если try/Catch не лучший ответ, как можно проверить, есть ли у конкретного объекта свойство, чтобы просто пропустить присваивание, если это не так? То немногое, что я нашел, было действительно уродливым/грязным подходом и/или попыткой/поймать во вспомогательной функции, так что вы просто не видите этого в большей части своего кода. Ни один из них по своей сути не лучше, кроме вспомогательной функции, обеспечивающей читабельность кода.

15.04.2015

Ответы:


1

Есть несколько подходов, о которых я знаю для этого. mjolinor украл первый.

Во-вторых, использовать Get-Member

If($object | Get-Member -MemberType Properties).Name -contains $property){
    $object.$property = $true
}
15.04.2015
  • Мэтт, это кажется самым элегантным решением, которое я видел, если предположить, что оно работает универсально. Или, возможно, мне просто нужно изучить два или три подхода для разных ситуаций и преодолеть проблемы с несогласованностью, которые у меня есть. Мне не удалось заставить решение mjolinor работать, но я назову домашнее задание на выходных, чтобы изучить его. ;) Возможно, проблема в версии 2. Спасибо! 15.04.2015
  • @Gordon Гордон Я думаю, что у вас может быть проблема в версии 2 с использованием точечной записи, как у мьолинор. prop.prop.prop Я думаю, что у него должна быть как минимум версия 3.0. Однако его решение все еще работает. Рады, что смогли помочь. 15.04.2015

  • 2

    Что-то вроде этого, может быть?

    if ($object.psobject.properties.name -contains $property)
      { $object.$property = $true }
    
    15.04.2015
  • Я думаю, это не работает для всего? Я бы предположил, что (gwmi win32_networkadapter).Psobject.properties.name это сработает, но, похоже, это не так. WMI был единственным примером, который я смог найти. 15.04.2015
  • @Matt - работает для меня (работает с V4), но возвращает массив, поэтому вам нужно повторить это и проверить каждый возвращаемый адаптер. 15.04.2015
  • Дурак я. Я проверял свойства массива, а не его элементы. Спасибо. 15.04.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..