Domanda

Ho appena iniziato a utilizzare C# e ho un paio di problemi.Esiste un modo per codificare l'equivalente C# dell'istruzione VB.NET Select come la seguente?

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 il contributo finora, che ne dici se collego diversi controlli a un gestore di eventi come nel seguente e desidero eseguire un'azione leggermente diversa per ciascun 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

Esiste un modo per eseguire l'istruzione select precedente in C# senza dover utilizzare if nidificati?

È stato utile?

Soluzione

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

Per esempio, in VB.NET, è possibile 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'è costrutto switch 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;
}

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

La ragione? switch C # s 'impone costanti per i vari cases. Questo è diverso da Select Case di VB.NET che permette la scrittura gamme.

Altri suggerimenti

Dovresti cercare l'istruzione switch...

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

Tieni presente che le interruzioni sono importate, altrimenti il ​​programma salterà i tuoi casi.Dovresti riuscire a trovarlo in quasi tutte le introduzioni in C#...

switch dichiarazione.

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 libero strumento di conversione online che permette di convertire VB.net per C # e viceversa.

Con C # 7, interruttore è stato notevolmente migliorato , ed è ora possibile applicare più condizioni all'interno dei casi, anche se è ancora non come "pulito" come la versione VB. Per esempio. si potrebbe fare qualcosa di simile:

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

Tratto da / References:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top