2010-03-15 21 views
17

Acabo de empezar a usar C# y tengo un par de problemas. ¿Hay alguna forma de codificar el equivalente de C# de la instrucción Select de VB.NET como la siguiente?VB.NET Seleccione ... Equivalente de declaración de caso en C#

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

Cualquier ayuda sería muy apreciada.


Gracias por la entrada hasta el momento ahora qué pasa si engancho varios controles a un controlador de eventos como en el siguiente y quiero realizar una acción ligeramente diferente para cada control:

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 

Es ¿Hay alguna forma de hacer la declaración de selección anterior en C# sin tener que usar if anidados?

Respuesta

14

He llegado a la conclusión de que algunas construcciones de VB.NET Select...Case no se aplican en C# y la única forma es escribir un montón de ifs .

Por ejemplo, en VB.NET, puede escribir:

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 

pero no hay switch construcción en C# que le permite hacer algo de este tipo. Vas a tener que codificar en la rotonda de este modo:

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

O si quieres pasar a estar trabajando con Double o de cualquier tipo que se compone de continuo en lugar de valores discretos, que tendrá que utilizar if s a obtener la acción requerida.

¿Razón? C# 's switch requiere constantes para los diversos case s. Esto es diferente de Select Case de VB.NET que permite escribir rangos.

+1

Es solo redondo debido a la perspectiva. Por ejemplo, en casos no numéricos, la declaración de cambio podría ser superior. –

5

Utilice una declaración switch.

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

Y no hay que olvidar que hay un free online conversion tool que permite convertir VB.net a C# y viceversa.

9

Se podrían buscar para la sentencia switch ...

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

Tenga en cuenta que los descansos son de importación, de lo contrario el programa se reducirá a través de sus casos. Debería poder encontrar esto en casi cualquier introducción de C# ...

+1

Tenga en cuenta que no tiene que especificar la palabra clave 'break' si lanza una excepción o devuelve un valor en su lugar. – intoOrbit

+1

cierto, pero solo como preferencia, en general me gusta un único retorno de los métodos, en lugar de regresar desde el interior de un interruptor. – Paddy

Cuestiones relacionadas