jby*_*yrd 3 vb.net conditional
我正在使用一些遗留的VB代码(.aspx页面),我看到这种格式的条件:
If (someVar And {integer_x}) = {integer_x} Then
Run Code Online (Sandbox Code Playgroud)
我已经看过各种整数,但它们似乎都是2的幂(8,64,256,16384等).
这段代码有什么作用?
这是一个按位检查.这篇文章说明了一切.
(但仅限链接的答案令人不悦,所以...)
当你进行按位操作时,你会寻找一个"开"的位,或者值为1.如果你寻找someVar And 8,那就是说"某些值在开启位置右边的第4位是否开启".
8翻译为二进制0001000.如果someVar在该位置有1,逻辑运算符And将返回0001000,或8.然后检查是否相等.请注意,someVar仍然可以有其他位.它可能值9(0001001),这仍然意味着条件是真的.
现在,除非这是针对具有电子系统的接口或解析原始数据,否则我会说这是一种真正过时的方式来执行Enum with the Flags属性可以做的事情.
让我们快进到今天:
<Flags()> _
Enum PizzaToppings
Sauce = 1
Pepperoni = 2
Mushrooms = 4
Peppers = 8
Bacon = 16
Ham = 32
Cheese = 64
Pineapple = 128
End Enum
'...
Dim myToppings As PizzaToppings = PizzaToppings.Sauce Or PizzaToppings.Cheese 'Use Or to combine or +
'...
If myToppings.HasFlag(PizzaToppings.Sauce) Then
addSauce()
End If
Run Code Online (Sandbox Code Playgroud)
如果你不想打扰权力,你也可以做一点转变:
1 << 0 is 2^0 is 1
1 << 1 is 2^1 is 2
1 << 2 is 2^2 is 4
1 << 3 is 2^3 is 8
Run Code Online (Sandbox Code Playgroud)
从而:
Enum PizzaToppings
Sauce = 1 << 0
Pepperoni = 1 << 1
'...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |