В моей модели я получаю свойство, представляющее собой целое число, состоящее из битовых флагов, обозначающих доступ к набору средств. Итак, если у объектов есть A, B, D, но отсутствует C, код для него будет 7 (1 + 2 + 0 + 4).

В таблице, которую я генерирую, я предпочитаю представлять ее как группу столбцов с «Y», если соответствующее средство присутствует в информации каждого отдельного объекта.

Но при наборе вырисовывалась следующая картина.


  @if ((station.Facility & 1) == 1) {yes}


  @if ((station.Facility & 2) == 2) {yes}

...

  @if ((station.Facility & 1024) == 1024) {yes}

Любое паршивое оправдание кодовой обезьяне чувствует, что здесь должно быть намного меньше строк, потому что мы должны повторять


  @if ((station.Facility & bit) == bit) {yes}

, за исключением крошечного бит, который какает через силы 2. Я немного DUI (развиваюсь под влиянием) из-за того, что 2016 год только начинается, может быть причиной того, что я не вижу, как для этого.

Тем не менее - как мне это сделать?


Кроме того, у меня также есть подозрение, что условное выражение может быть упрощено, так как сейчас присутствуют вложенные круглые скобки. Я был удивлен, что И (оператор &) связывает слабее, чем равенство (оператор ==), но я решил это так. Я рассматривал возможность использования сдвига (оператор <<), но синтаксис стал на самом деле более сложным, и, учитывая, что скорость не совсем проблема, мне не нужно его использовать (если это не упрощает код).

Есть ли более простой способ добиться этого?

Konrad Viltersten

Ответов: 1

Ответы (1)

Попробуйте для оператора.

@{ int max = 10; }

@for(int i = 1; i <= max; i++)
{
  if (station.Facility & (1 << i-1) != 0)
  {yes}
}

Также к прочтению - здесь пост.

2022 WebDevInsider