Je suis sur un coup étrange de voir combien de lignes je peux faire mon code. Existe-t-il un moyen de condenser cela à des déclarations de cas en ligne?
switch (FIZZBUZZ)
{
case "Fizz": //Do one process
case "Buzz": //Do one process
case "FizzBuzz": //Do one process
}
13 Réponses :
Si vous voulez condenser des choses, vous pouvez simplement mettre des choses sur une ligne (imaginons que "faire un processus est un appel à et vous pouvez ensuite appeler la méthode comme celle-ci: p> < Pré> xxx pré> p> console.writeline code>):
Eh bien, mais j'ai "guérisseur" et "guidon" pour les deux appels. puis appelez-les à la fois pour Fizzbuzz. Je voudrais répéter le code de cette façon. Autant que j'aime condenser, j'aime l'efficacité. :)
@JIM - J'aime l'exactitude, la lisibilité et la maintenabilité. Je suis heureux que dans l'exemple de Fizzbuzz au moins, nos intérêts peuvent coïncider. :-)
Vous devez toujours avoir une déclaration de pause afin de quitter le commutateur autre que celui que vous pouvez le faire comme vous le mentionnez
switch (FIZZBUZZ)
{
case "Fizz": /*Do one process*/break;
case "Buzz": /*Do one process*/break;
case "FizzBuzz": /*Do one process*/break;
}
Bien un moyen facile serait: qui n'est qu'une ligne chacune. Mais il y a plusieurs déclarations par ligne ... p> p>
Eh bien, si vous êtes vraiment intéressé par le moins de les lignes de code em> vous pouvez écrire: Je ne le recommanderais pas cependant. P> < P> Il est difficile de dire exactement ce que vous demandez, essayez-vous de tomber entre les cas ou simplement de supprimer des accolades? P> P>
En fait, j'ai fait ça à un collègue qui m'a irrité une fois. A écrit une classe entière sur une seule ligne.
J'essaie de supprimer les accolades.
@JIM: Autre que les accolades autour du bloc de commutation lui-même, vous ne besoin i> les autres accolades, alors simplement les supprimer. Bien que si vous créez des variables dans l'un de ces cas, il est suggéré de les avoir à assurer la sécurité de la portée.
Je ne sais aucun moyen de le faire, tout en conservant une certaine lisibilité, autre que l'évidence:
Vous pouvez mettre autant de code sur une ligne que vous le souhaitez avec C #. P>
Comme Andrew dit. P>
Personnellement, ma préférence est de laisser de l'espace blanc car il permet une lecture plus facile du code, mais je suis à nouveau le seul dev ici qui commente son code ou écrit des méthodes et des fonctions suffisamment petites pour pouvoir numériser rapidement le code pour voir exactement ce qu'il fait. :) p>
Vous n'avez pas besoin des accolades frisées pour les déclarations de cas, mais avez-vous besoin d'une déclaration de pause pour chaque cas? Sinon, vous ne pouvez pas vraiment faire beaucoup p>
Avec l'hypothèse que cela est purement ésotérique et que vous ne serez pas tenté de l'utiliser dans un système de production, vous pouvez abuser des arbres d'expression: où interrupteur code> est une méthode d'extension: p>
Je l'aime bien! manière intéressante de faire des choses.
FYI, si quelqu'un cherche une déclaration de cas de commutation sténographique en ligne pour retourner une valeur, j'ai trouvé la meilleure solution pour moi était d'utiliser l'opérateur ternaire plusieurs fois:
string FizzBuzz = "Fizz";
FizzBuzz = FizzBuzz == "Fizz" ? MethodThatReturnsAString("Fizz") : (FizzBuzz == "Buzz" ? MethodThatReturnsAString("Buzz") : MethodThatReturnsAString("FizzBuzz"));
Qu'en est-il de la performance entre cela et d'utiliser une boucle "externe" ?.
Affiche nécromancienne ici P>
Alors j'ai pris cela comme un défi. Au lieu des réponses habituelles des déclarations "Il suffit d'utiliser Switch..Case Syntaxe", je lui ai fait un défi codant de compétences et de connaissances (pas que j'ai beaucoup de). P>
Configuration h2> < P> Utiliser .NET .NET -4.5.2 p>
xxx pré> implémentation h2>
xxx pré> blockquote>
in c # 8, vous pouvez faire quelque chose comme ceci ceci est équivalent à p>
Oui, mais vous retournez une valeur. Le défi consiste à effectuer une action.
Un défi consiste à utiliser C # 8 Switch Expressions
Le problème est que le corps de chaque branche est une expression, pas un groupe d'instructions. P>
Vous pouvez contourner cela en faisant de la ramification de chaque branche code> action code> objet. p>
Notez la syntaxe: Si j'applique explicitement l'une des expressions sur le type code> Action Code>, le compilateur jette implicitement chacun des autres expressions. J'ai choisi de lancer la dernière expression (par défaut). P>
Vous pouvez maintenant effectuer des opérations de commutation comme ceci: P>
string FIZZBUZZ = "fizz";
string result = String.Empty;
_= (FIZZBUZZ switch
{
"fizz" => () =>
{
Console.WriteLine("fizz");
result = "fizz";
},
"fuzz" => () =>
{
Console.WriteLine("fuzz");
result = "fuzz";
},
_ => new Action(() => { })
});
Descendez ce coup de pied, certaines choses peuvent être faites bien comme telles, mais vous allez généralement commencer à écrire de moins en moins de code lisible ..
Je pense que cela nécessite une mise à jour car cela est possible en C # 8