Как использовать перечисления в сценариях DXL?

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

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

person h0b0    schedule 30.08.2011    source источник
comment
Ничего себе, я никогда не ожидал, что столкнусь с языком настолько экзотическим, что stackoverflow держит свои тысячи ртов закрытыми.   -  person h0b0    schedule 30.08.2011


Ответы (4)


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

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

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

Это было просто. Не так ли? И здесь я наконец-то нашел руководство «Все, что вам нужно знать о DXL».

person h0b0    schedule 16.09.2011
comment
К сожалению, Справочное руководство DXL не дает подробного объяснения. В частности, пытаясь добиться того же, что и вы, я просмотрел руководство, прежде чем искать и находить решение здесь. Если бы инструкция содержала подсказку, было бы здорово добавить к ней номер раздела. В любом случае, спасибо за ваш вопрос и решение! - person Twonky; 23.07.2015

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

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

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

person Steve Valliere    schedule 29.08.2012

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

person racketteer    schedule 02.06.2017
comment
Это именно то, что я искал! Спасибо. - person James Mertz; 09.11.2017

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

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

person Carl Witthoft    schedule 31.01.2017