VB.NET选择...在C#中等效的Case语句

时间:2010-03-15 12:36:06

标签: c# vb.net vb.net-to-c#

我刚开始使用C#而且我遇到了一些问题。 有没有办法编写类似于以下的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

有没有办法在C#中执行上面的select语句而不必使用嵌套的ifs?

4 个答案:

答案 0 :(得分:16)

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

例如,在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

但是C#中没有switch构造允许你做这种事情。你必须像环形交叉口一样编码:

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来获取所需的操作。

原因? C#的switch需要各种case的常量。这与VB.NET的Select Case不同,后者允许编写范围。

答案 1 :(得分:9)

您正在寻找切换声明......

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

请注意,中断是导入的,否则程序将在您的案例中丢失。您几乎可以在任何C#介绍中找到它...

答案 2 :(得分:5)

使用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#而反之亦然。

答案 3 :(得分:0)

使用C#7,交换机已经显着增强,现在可以在案例中应用更多条件,尽管它仍然不像VB版本那样“干净”。例如。你可以这样做:

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;
}

取自/参考文献: