Как использовать перечисления в сценариях DXL? - PullRequest
5 голосов
/ 30 августа 2011

Я бы хотел проверить значение атрибута перечисления объекта DOOR.Как это может быть сделано?И где я могу найти документацию DXL, описывающую основные функции, подобные этой?

if (o."Progress" == 0) // This does NOT work
{
  // do something
}

Ответы [ 4 ]

4 голосов
/ 16 сентября 2011

Так что после двух недель и истекшего вознаграждения я наконец сделал это. Enum-Атрибуты могут быть назначены для int или строковых переменных по желанию. Но вы должны назначить переменную для выполнения такого преобразования. Он не приводится, когда делается простое сравнение, как в моем примере. Итак, вот решение:

int tmp = o."Progress"
if (tmp == 0)
{
  // do something
}

Когда tmp является строкой, возможно сравнение с литералами enum.

Это было легко. Не так ли? И здесь Я наконец нашел руководство "Все, что нужно знать о DXL".

2 голосов
/ 02 июня 2017

Для многозначных перечислений лучший способ - if (isMember(o."Progress", "0")) {.Возможные перечисления для переменных с одним и несколькими перечислениями считаются строками, поэтому решение Стива является лучшим dxl-способом для единственного перечисления.

2 голосов
/ 29 августа 2012

Вы также можете сделать

if(o."Progress" "" == "0")
{
   //do something
}

Это приведёт значение атрибута к строке и сравнит его со строкой "0"

0 голосов
/ 31 января 2017

Если вы говорите о «связанном номере», который можно назначить из поля «Редактировать типы», то вам нужно начать с получения позиции строки перечисления внутри перечисления, а затем получить EnumName[k].value.

Я не эксперт в DXL, поэтому единственный способ найти индекс, который я знаю, на вершине моей головы, - это перебрать 1 : EnumName.size, и когда вы получите совпадение со строкой перечисления, используйте этот цикл значение индекса для получения перечисления «связанный номер».

...