我刚开始使用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?
答案 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;
}
取自/参考文献: