Switch statement: è possibile fare riferimento al caso?

-3

Sto lavorando allo sviluppo di un gioco semplice e sto usando l'istruzione switch abbastanza frequentemente. È possibile fare riferimento al caso specifico in questione anziché digitare il valore costante? Ad esempio:

switch(String upgrade)
{
       case(Bullet_Power_1):
           remainingUpgrades.Remove("Bullet_Power_1");
           buyableUpgrades[i].setUpgradeId("Bullet_Power_1");
           break;
}

Ogni volta che scrivo "" Bullet_Power_1 "" c'è una scorciatoia per fare riferimento al caso poiché dovrò scrivere la stringa molte volte.

    
posta K. Terr 18.08.2016 - 06:44
fonte

3 risposte

4

Dal tuo minuscolo frammento di codice, ho intenzione di fare due ipotesi:

Presupposto 1. Bullet_Power_1 è definito come:

const string Bullet_Power_1 = "Bullet_Power_1";

Se questo è il caso, il tuo case può essere solo:

switch(String upgrade)
{
   case(Bullet_Power_1):
       remainingUpgrades.Remove(upgrade);
       buyableUpgrades[i].setUpgradeId(upgrade);
       break;
}

Assumption 2. Il resto del tuo switch è qualcosa del tipo:

switch(String upgrade)
{
    case(Bullet_Power_1):
       remainingUpgrades.Remove("Bullet_Power_1");
       buyableUpgrades[i].setUpgradeId("Bullet_Power_1");
       break;
    case(Bullet_Power_2):
       remainingUpgrades.Remove("Bullet_Power_2");
       buyableUpgrades[i].setUpgradeId("Bullet_Power_2");
       break;
    ...
}

In tal caso, puoi eliminare switch e fare semplicemente:

remainingUpgrades.Remove(upgrade);
buyableUpgrades[i].setUpgradeId(upgrade);
    
risposta data 18.08.2016 - 13:20
fonte
3

Quello che chiedi non ha niente a che fare con quelle costanti che fanno parte di un caso switch . Se vuoi ottenere il nome della costante Bullet_Power_1 come stringa letterale ovunque nel tuo programma quando conosci solo il valore, la soluzione più semplice a cui riesco a pensare è creare un dizionario per contenere il coppie chiave / valore in anticipo:

   var constNames = new Dictionary<string,string>()
   {
       {Bullet_Power_1,"Bullet_Power_1"},
       {Bullet_Power_2,"Bullet_Power_2"}
       // ...
   };

(tieni presente che presumo che il tuo costante Bullet_Power_1 non contenga già il valore "Bullet_Power_1" , altrimenti questo sarebbe superfluo, sarebbe utile se vuoi confermare questa ipotesi).

Ora, ogni volta che devi cercare il nome costante Bullet_Power_1 , puoi scrivere

      string foo=constNames[Bullet_Power_1];

o nel tuo caso sopra

       remainingUpgrades.Remove(constNames(upgrade));

In C # 6, è possibile utilizzare nameof per riempire il dizionario:

   var constNames = new Dictionary<string,string>()
   {
       {Bullet_Power_1,nameof(Bullet_Power_1)},
       {Bullet_Power_2,nameof(Bullet_Power_2)}
       // ...
   };

Il vantaggio è che questo eviterà una modifica accidentale del nome della costante (ad esempio, utilizzando il refactoring dei nomi di Visual Studio), in cui si potrebbe anche dimenticare di modificare anche il valore della stringa.

    
risposta data 18.08.2016 - 07:57
fonte
-1

Strano che nessuno abbia suggerito un'enumerazione. Che dire di

public enum Upgrade
{
    Bullet_Power_1,
    Bullet_Power_2,
    Something_Different_1
}
    
risposta data 19.08.2016 - 16:02
fonte

Leggi altre domande sui tag