当前位置:  开发笔记 > 编程语言 > 正文

什么是带有OR-ing的VB.NET select case语句逻辑?

如何解决《什么是带有OR-ing的VB.NETselectcase语句逻辑?》经验,为你挑选了4个好方法。

我在我的case表达式中使用了Or语句.

即使我有一个在此范围内的值,它也找不到匹配项.为什么不?

示例代码:

Select Case 2
    Case 0
        ' Some logic

    Case 1
        ' Some other logic

    Case 2 Or 3
        Console.WriteLine("hit")

 End Select

有了上面我会假设hit将打印,但事实并非如此.



1> JaredPar..:

使用逗号运算符分隔case语句

Select Case 2
    Case 0,1,2,3
        Console.WriteLine("hit")
 End Select


-1,因为它没有回答所述的问题.它提供了提问者尝试的替代解决方案.问题是:VB如何解释Select语句中的OR运算符?否则,必须编辑问题以匹配答案.但我不建议,因为@JohnT给出了正确答案.
@Geoffrey,国际海事组织了解OP的意图比回答他所要求的更为重要.这是法律文字与法律精神之间的相同概念.两者都是正确的,但我认为法律的精神(即他的意图)更为正确.

2> 小智..:

正如Jared所说,您需要使用逗号运算符来分隔case语句.

Or你在做一个按位OR,导致它成为"3".有趣的是,"2和3"可能适用于您的具体案例.



3> Jason Punyon..:

JaredPar没错,但您也可以使用To构造

Select Case 2
    Case 0,1
    Case 2 To 3
        Console.WriteLine("Hit")
End Select

这将是0或1什么都不做,2或3打印命中... To构造是一个范围...

这是MSDN



4> user67143..:

编辑: 我认为假设VB.NET不允许Case ORing是错误的.我在C#和IL中思考,看来我错了.

然而,正如有人指出的那样,你的代码不起作用的原因是因为案例2或3正在评估2或3作为按位或因此评估案例3.

为了澄清:

       2 binary = 0000 0010
       3 binary = 0000 0011
  2 Or 3 binary = 0000 0011 (= 3)
  Select Case 2
     Case 0            '--> no match

     Case 1            '--> no match

     Case 2 Or 3       '(equivalent to Case 3  --> no match)
   End Select

但是,我觉得我应该指出,为了表现,不应该使用这样的结构.当编译器遇到Select语句(在C#中切换)时,它将尝试使用查找表和切换 MSIL指令编译它们,但是如果你有类似案例1,2,11,55情况,编译器将无法转换到查找表,它将不得不使用一系列比较(这就像使用If .. Else).

关键是,为了真正利用Select语句,应该考虑到这些案例.否则,唯一的好处是代码可读性.

设计良好的开关是O(1)操作,而设计不良的开关(相当于一系列If..Then..Else语句)是O(n)操作.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有