2010-03-15 18 views
17

Je viens de commencer à utiliser C# et j'ai quelques problèmes. Est-il possible de coder l'équivalent C# de l'instruction VB.NET Select comme suit?VB.NET Select ... Affirmation de cas Equivalent en C#

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

Toute aide serait grandement appréciée.


Merci pour l'entrée jusqu'à maintenant que dire si j'accroche plusieurs commandes à un gestionnaire d'événements comme dans ce qui suit et je veux effectuer une action légèrement différente pour chaque commande:

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 

Est Y at-il un moyen de faire l'instruction select ci-dessus en C# sans avoir à utiliser des ifs imbriqués?

Répondre

14

Je suis venu pour trouver au fil du temps que quelques constructions de VB.NET Select...Case ne s'appliquent pas en C# et la seule manière est d'écrire beaucoup d'ifs .

Par exemple, VB.NET, vous pouvez écrire:

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 

Mais il n'y a pas switch construction en C# qui vous permet de faire quelque chose de ce genre. Vous devez coder en rond-point comme ceci:

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

Ou si vous arrive de travailler avec Double ou tout autre type qui est composé de continu au lieu de valeurs discrètes, vous devrez utiliser if s pour obtenir l'action requise.

Raison? Le switch de C# requiert des constantes pour les divers case s. Ceci est différent de Select Case de VB.NET qui permet des plages d'écriture.

+1

Il est seulement rond en raison de la perspective. Par exemple, dans les cas non numériques, l'instruction switch peut être supérieure. –

5

Utilisez une instruction switch.

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

Et ne pas oublier qu'il ya un free online conversion tool qui vous permet de convertir VB.net en C# et vice-versa.

9

Vous seriez à la recherche de l'instruction switch ...

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

Notez que les pauses sont l'importation, sinon le programme baissera dans vos affaires. Vous devriez pouvoir trouver ceci sur presque n'importe quelle introduction de C# ...

+1

Notez que vous n'avez pas besoin de spécifier le mot clé 'break' si vous lancez une exception ou si vous renvoyez une valeur à la place. – intoOrbit

+1

vrai, mais de préférence, j'aime généralement un seul retour de méthodes, plutôt que de revenir de l'intérieur d'un commutateur. – Paddy