2010-03-15 12 views
17

Ho appena iniziato ad usare C# e ho un paio di problemi. Esiste un modo per codificare l'equivalente C# dell'istruzione VB.NET Select come segue?VB.NET Seleziona ... Equivalente di un caso in C#

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

Qualsiasi aiuto sarebbe molto apprezzato.


Grazie per l'input finora ora che dire se collego diversi controlli a un gestore di eventi come nel seguente e voglio eseguire un'azione leggermente diverso per ogni controllo:

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 

Is c'è un modo di fare l'istruzione select sopra in C# senza dover usare if if annidati?

risposta

14

Sono venuto a trovare nel tempo che alcuni costrutti VB.NET Select...Case non si applicano in C# e l'unico modo è scrivere un sacco di se .

Per esempio, in VB.NET, si può scrivere:

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 

ma non c'è switch costrutto in C# che ti permette di fare qualcosa di questo tipo. Dovrete codice in rotonda in questo 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; 
} 

Oppure, se vi capita di lavorare con Double o qualsiasi tipo che si compone di una continua, invece di valori discreti, dovrete usare if s per ottenere l'azione richiesta.

Motivo? switch di C# richiede costanti per i vari case s. Questo è diverso da VB.NET Select Case che consente di scrivere intervalli.

+1

È solo rotondo a causa della prospettiva. Ad esempio, in casi non numerici, l'istruzione switch potrebbe essere superiore. –

5

Utilizzare una dichiarazione switch.

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

E non dimenticate che c'è una free online conversion tool che permette di convertire VB.net per C# e viceversa.

9

Sareste alla ricerca per l'istruzione switch ...

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

Nota che le pause sono di importazione, altrimenti il ​​programma scenderà attraverso i vostri casi. Dovresti riuscire a trovarlo su quasi tutte le introduzioni di C# ...

+1

Si noti che non è necessario specificare la parola chiave 'break' se si lancia un'eccezione o si restituisce un valore. – intoOrbit

+1

vero, ma proprio come una preferenza, in genere mi piace un singolo ritorno dai metodi, piuttosto che il ritorno da dentro un interruttore. – Paddy

Problemi correlati