Pregunta

acabo de empezar con C # y tengo un par de cuestiones. ¿Hay alguna manera de codificar el equivalente C # de la declaración VB.NET Seleccionar como la siguiente?

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

¿Hay alguna manera de hacer la instrucción de selección anterior en C #, sin tener que utilizar ifs anidados?

¿Fue útil?

Solución

Me han llegado a encontrar con el tiempo que algunas construcciones Select...Case VB.NET no se aplican en C # y la única manera de evitar es escribir un montón de IFS.

Por ejemplo, en VB.NET, se 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

Sin embargo, no hay ninguna construcción switch en C # que le permite hacer algo de este tipo. Vas a tener que codificar en la rotonda de esta manera:

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 le toca estar trabajando con Double o de cualquier tipo que se compone de continuo en lugar de valores discretos, que tendrá que utilizar ifs para conseguir la acción requerida.

La razón? switch C # 's requiere constantes para los distintos cases. Esto es diferente de Select Case de VB.NET que permite la escritura rangos.

Otros consejos

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. Usted debe ser capaz de encontrar esto en casi cualquier C # introducción ...

Utilice una instrucció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 se olvide que hay una herramienta de conversión en línea gratis que le permite convertir VB.net a C # y viceversa.

Con C # 7, el interruptor se ha mejorado significativamente , y ahora es posible aplicar más condiciones dentro de los casos, aunque todavía no es tan "limpia" como la versión VB. P.ej. usted podría hacer algo como:

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

Tomado de / Referencias:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top