代码之家  ›  专栏  ›  技术社区  ›  Alex Essilfie

VB.NET Select…C中等价的Case语句#

  •  18
  • Alex Essilfie  · 技术社区  · 15 年前

    有没有什么方法可以像下面这样编写VB.NET Select语句的C等价物?

    Select Object.Name.ToString()
        Case "Name1"
            'Do something
        Case "Name2"
            'Do something else
        Case Else
            'Do the default action
    End Select
    


    感谢到目前为止的输入,如果我将多个控件挂接到一个事件处理程序,如下面所示,并希望对每个控件执行稍微不同的操作,该怎么办

    Private Sub Button_Click(sender as Object, e as EventArgs) _
      Handles button1.Click, Button2.Click
    
        'do a general activity
    
        Select CType(sender, Button).Name
            Case button1.Name
                'do something
            Case button2.Name
                'do something else
            Case Else
                'do the defalut action
        End Select
    End Sub
    

    有没有什么方法可以不用嵌套ifs在C#中执行上述select语句?

    4 回复  |  直到 13 年前
        1
  •  16
  •   Alex Essilfie    11 年前

    随着时间的推移,我发现一些VB.NET Select...Case 构造不适用于C#,唯一的解决方法是编写大量的IF。

    例如,在VB.NET中,可以编写:

    Dim num as Integer = 5
    
    Select Case num
        Case 1 to 10
            'do something
    
        Case 11 to 20
            'do another thing
    
        Case Else
            'do the default
    End Select
    

    但是没有 switch 在C语言中构造一个能让你做这类事情的。你必须在环形交叉路口这样编码:

    int num = 5;
    
    switch (num)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
            //do something
            break;
        case 11:
        case 12:
        case 13:
        case 14:
        case 15:
        case 16:
        case 17:
        case 18:
        case 19:
        case 20:
            //do something else
            break;
        default:
            //do the default
            break;
    }
    

    或者如果你碰巧和 Double 或者任何由连续值而不是离散值组成的类型,都必须使用 if

    转换 需要各种 case S这与VB.NET不同 Select Case

        2
  •  9
  •   Paddy    15 年前

    你要找的是switch语句。。。

    switch (Object.Name.ToString())
    {
       case  "Name1":
         //Do something
         break;
       default:
         //default
         break;
    }
    

    请注意,中断是导入的,否则程序将通过您的案件下降。你应该可以在几乎所有的介绍中找到这个。。。

        3
  •  5
  •   Klaus Byskov Pedersen    15 年前

    switch 陈述

    switch (object.Name.ToString()) {
      case "Name1":
        break;
        //Do something 
      case "Name2":
        break;
        //Do something else 
      default:
        break;
       //Do the default action 
    }
    

    别忘了还有一个 free online conversion tool 它允许您将VB.net转换为C#,反之亦然。

        4
  •  1
  •   Saurabh Rai    7 年前

    使用C#7,交换机得到了显著增强

    switch (examScore)
    {
      case int es when es >= 90: grade = "A"; break;
      case int es when es >= 80: grade = "B"; break;
      case int es when es >= 70: grade = "C"; break;
      case int es when es >= 60; grade = "D"; break;
      default: grade = "F"; break;
    }
    

    摘自/引用: