gpt4 book ai didi

c# - 在 ASP.NET MVC 中使用按位标志

转载 作者:行者123 更新时间:2023-11-30 20:45:12 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 应用程序。我的应用程序在 View 中使用 Razor 。我的 View 有一个复选框列表。呈现的 HTML 如下所示:

<ul>
<li>
<input type="checkbox" name="SelectedValues" value="1" id="1" />
<label for="1">Option 1</label>
</li>

<li>
<input type="checkbox" name="SelectedValues" value="2" id="2" />
<label for="2">Option 2</label>
</li>

<li>
<input type="checkbox" name="SelectedValues" value="3" id="3" />
<label for="3">Option 3</label>
</li>

<li>
<input type="checkbox" name="SelectedValues" value="4" id="4" />
<label for="4">Option 4</label>
</li>
</ul>

当用户单击“保存”时,这些值将作为 int[] SelectedValues 存储在我的模型中。

我的挑战是,我的数据库只有一个 int 类型的字段。我可以对 SelectedValues 进行某种按位 XOR 并且安全吗?如果是这样,我将如何在 C# 中的 SelectedValues 上执行此操作?

谢谢!

最佳答案

是的,您所问的是可能的,唯一的问题是,由于您选择的值执行或会导致冲突。

例如:1 | 2 == 3该选项应该是1,2的代码如何或者只是 3 .

解决方案是将其转换为位。您可以使用 <<符号来做到这一点。 <<会将值向左移动若干位。

  • 1<<0给你100000001作为 8 位二进制
  • 1<<1给你100000010作为 8 位二进制
  • 1<<2给你100000100作为 8 位二进制
  • 1<<3给你100001000作为 8 位二进制
  • 1<<4给你100010000作为 8 位二进制

如您所见,每个项目都有一个唯一的字节数组,因此您可以将它们组合在一起以提供组合结果

  • 1<<0 | 1<<2给你500000101 8位二进制

这是完全可逆的。

  • (5 & 1<<2) != 0会告诉你是否设置了第 2 位。

要实现,您可以使用 Linq 转换数组。

从整数数组中获取单个整数:

var array = new[] {1,2,4};
var result = array.Aggregate(0, (x,y) => x | 1<<(y-1));

我从每个值中减去 1,这样 1 的 int 就变成了 1 的值

要扭转这一局面,您可以再次使用 linq 创建数组。

var value = 5;
var result = Enumerable.Range(1,8).Select(x => (value & 1<<(x-1)) !=0).ToArray();

这将返回一个 bool 值数组,指示每个位的真或假。

仅获取设置值列表:

var value = 5;
var result = Enumerable.Range(1,8).Where(x => (value & 1<<(x-1))!=0).Select(x => 1 << (x-1)).ToArray();

此函数适用于 8 个值,但可以根据需要进行更改。

请记住,您可以在整数中存储的最大位数,请检查其大小,有些是 16 位整数,有些是 32 位。 c# 作为一种语言有 32 位整数,为了更大的使用 long。

此外,由于有符号整数使用最高位作为符号,您不应该在使用最高位时遇到问题。

关于c# - 在 ASP.NET MVC 中使用按位标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28476133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com