使用 Razor 将 int 转换为一组列

Converting an int into a set of columns with Razor

在我的模型中,我收到一个 属性,它是一个由位标志组成的整数,表示可以访问一组设施。因此,如果对象具有 A、B、D 但缺少 C,则其代码将为 7 (1 + 2 + 0 + 4)。

在我生成的 table 中,如果相应的设施存在于每个单独对象的信息中,我更愿意将其显示为带有 "Y" 的一堆列。

但是当输入时出现了一个模式,如下所示。

<td>
  @if ((station.Facility & 1) == 1) {<span>yes</span>}
</td>
<td>
  @if ((station.Facility & 2) == 2) {<span>yes</span>}
</td>
...
<td>
  @if ((station.Facility & 1024) == 1024) {<span>yes</span>}
</td>

对代码猴子的任何半烂借口都觉得这里应该少很多行,因为我们应该重复

<td>
  @if ((station.Facility & bit) == bit) {<span>yes</span>}
</td>

除了微小的,它正在通过 2 的力量大便。我有点 DUI(在影响下发展),因为 2016 年刚刚开始,可能是原因我不知道该怎么做。

尽管如此 - 我该怎么做?


另外,我也怀疑条件表达式可能被简化了,因为现在有嵌套的括号。我很惊讶 AND(& 运算符)比等式(== 运算符)绑定更弱,但这就是我解决它的方式。我考虑过使用移位(<< 运算符),但语法实际上变得更加复杂,并且考虑到速度不是问题,我不必使用它(除非它简化代码)。

有没有更流畅的方法来实现?

尝试 for 语句。

@{ int max = 10; }

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

还有待读-一个post here.