2012-05-02 3 views
2

Je donne les résultats suivants:Puis-je simplifier cette déclaration de cas?

switch (id.Substring(2, 2)) 
{ 
    case "00": return("14"); 
    case "01": return("19"); 
    case "02": return("19"); 
    case "03": return("19"); 
    case "1F": return("19"); 
    case "04": return("17"); 
    case "05": return("18"); 

} 

Je ne sais pas à ce sujet, mais est-il un moyen que je peux combiner le « 01 », « 02 », « 03 » et « 1F » en un seul?

+1

le terme technique pour ce que vous cherchez est « l'automne -through " –

+3

Fyi,' return' n'est pas un appel de fonction, donc vous n'avez pas besoin de parenthèses autour de la valeur de retour. – ThiefMaster

+0

@KshitijMehta, C# ne prend pas en charge les retombées réelles, uniquement le cas spécifique où seul l'élément a du code. – svick

Répondre

11
switch (id.Substring(2, 2)) 
    { 
     case "00": return("14"); 
     case "01": 
     case "02": 
     case "03": 
     case "1F": return("19"); 
     case "04": return("17"); 
     case "05": return("18"); 
    } 

Fondamentalement, aussi longtemps que vous n'ajoutez pas de code (puisque n'est pas pris en charge fall-through), vous pouvez utiliser le même chemin de résultats pour les valeurs de test multiples.

+0

Comment "goto case '19" se distingue-t-il en performance et en pratique? – Independent

+1

performance: très bien; pratique ... eh bien, certaines personnes se fâchent énormément à propos de 'goto' - je suis plutôt pragmatique et ça ne le dérange pas, mais il y a généralement des façons plus simples de l'écrire –

3

Une autre façon est de créer un dictionnaire avec les clauses de cas (00, 01, etc.) que les clés et les valeurs 14, 19, etc.

passer ensuite sur ce point.

0

Je ne sais pas si cela va ajouter une valeur aux réponses actuelles, mais en ligne avec JFS - je faire ce qui suit ...

  var result = new Dictionary<string, string>(); 

      result.Add("00","14"); 
      result.Add("01", "14"); 
      result.Add("02", "14"); 
      result.Add("03", "14"); 
      result.Add("1F", "19"); 
      result.Add("04", "17"); 
      result.Add("05", "18"); 

      return result[id.Substring(2, 2)];