Est-il possible de créer un objet qui stocke le résultat de l'instruction switch en c #? Parce que mon objectif final est de comparer l'objet dans une instruction if, et si c'est vrai, il imprimera une écriture.
switch (results)
{
case 1:
checkingWriter.WriteLine("text");
break;
case 0:
checkingWriter.WriteLine("text");
error_Found = true;
break;
case -1:
checkingWriter.WriteLine("text");
error_Found = true;
break;
case -2:
checkingWriter.WriteLine("text");
error_Found = true;
break;
case -3:
checkingWriter.WriteLine("text");
error_Found = true;
break;
}
4 Réponses :
Oui, quelque chose comme (mais très basique car nous n'avons pas de détails):
var objectToCheck = ...; // Some initialized value or null
switch(...)
{
case ...:
objectToCheck = ...
break;
case ...:
objectToCheck = ...
break;
...
default:
Error handling
}
if (objectToCheck ==/.Equals(...) ) // Check object
créer une variable avant le début de l'instruction switch, stocker le résultat de la casse de commutation dans variable. Une fois le basculement terminé, utilisez la variable dans la condition if .
var result = null;
switch (caseSwitch)
{
case 1:
result = fn1();
break;
case 2:
result = fn2();
break;
default:
Console.WriteLine("Default case");
break;
}
if(result == 'your condition')
do something
Vous mélangez les effets secondaires et le calcul d'une valeur; c'est une mauvaise odeur de code et vous pourriez envisager de séparer cette logique.
Pour répondre à votre question spécifique: pour le moment, il n'y a pas de moyen facile d'obtenir une valeur calculée par une section de cas de commutateur particulière hors du commutateur. Cependant, cette fonctionnalité a été proposée pour C # 8.0, il semble donc probable que vous en obtiendrez une version. Voir le lien ci-dessous pour la proposition:
https: //neelbhatt.com/2018/05/19/c-8-0-expected-features-part-iii-switch-statments/
Il n'y a pas assez de détails mais cela peut fonctionner, ou vous donner une nouvelle idée:
//Nothing happend //Do Something Custom Here //Error 183 //Do Another Something Custom Here
Et quand vous l'utilisez:
public static void Main()
{
Foo foo = new Foo();
int results = 0;
// makes some logic that fills results
if(foo == results){
Console.WriteLine("Do Something Custom Here");
}
results = -1;
if(foo == results){
Console.WriteLine("Do Another Something Custom Here");
}
}
Cela vous donnera dans la console quelque chose comme ceci:
public class Foo
{
public static bool operator !=(Foo foo1, int results){
return results <= 0;
}
public static bool operator ==(Foo foo1, int results){
switch(results)
{
case 1:
Console.WriteLine("All gones good");
return false;
case 0:
Console.WriteLine("Nothing happend");
break;
case -1:
Console.WriteLine("Error 183");
break;
case -2:
Console.WriteLine("Fatal Error");
break;
case -3:
Console.WriteLine("The user doesn't exists");
break;
default:
return false;
}
return true;
}
}
Nous avons besoin d'un peu plus de détails que cela. Pouvez-vous nous fournir un exemple de déclaration de commutation?
@RobertHarvey oui! je viens de le poster
Bien. Alors, pourquoi le code que vous avez publié ne fonctionne-t-il pas tel quel?
J'essaie juste de stocker le résultat du changement dans un objet, afin que je puisse l'utiliser pour le comparer à autre chose dans une instruction if @RobertHarvey
On dirait que tu vas très bien. Continuez et bonne chance!