7
votes

Est-il possible de refrorcer cette déclaration C # si (..)?

Question simple: -

J'ai les déclarations simples simples suivantes: - P>

if (foo == (Animal.Cat || Animal.Dog))
{ .. }

if (baa == (1 || 69))
{ .. }


1 commentaires

7 Réponses :


1
votes

Vous pouvez utiliser le commutateur avec fratthrough (un héritage laid de syntaxe C): xxx

ne fonctionnera que pour de tels exemples triviaux, cependant, et je voudrais suggère de coller à si dans ce cas de toute façon.


0 commentaires

13
votes

Je crée généralement une méthode d'extension appelée isine () qui prend un tableau de paramètres générique de type puis appelle .Contains () sur celui-ci, passant l'instance sur laquelle l'extension est appelée.

Il ressemble à si (foo.isin (FOO1, FOO2)) . Très simple à écrire, super facile à utiliser.


2 commentaires

J'aime ça :) Pas sûr si je vais l'utiliser, mais c'est une réponse kewl. à votre santé!


Bien que syntaxiquement bien, je l'éviterais à l'intérieur des boucles serrées et de la haute performance, car params t [] args provoque une matrice allouée en tas sur chaque invocation, malheureusement pas cher, malheureusement. Cela pourrait être atténué en ayant des surcharges spécifiques pour un petit nombre d'arguments, comme comment string.format fait.



3
votes

Ce n'est pas très utile dans ce cas spécifique où vous n'avez que deux options, mais s'il pourrait y avoir de nombreuses options, vous préférez définir les options dans une liste, puis utiliser contient comme ceci: < Pré> xxx

Cette méthode fonctionnera également sur d'autres types que Enums y compris les types que vous ne pouvez pas commutateur sur. Il est également utile si la liste des valeurs autorisées ne sera connue qu'au temps d'exécution.

Notez que si vous créez une nouvelle liste à chaque fois, une pénalité de performance sera une pénalité de performance.


0 commentaires

2
votes

Vous pouvez utiliser une méthode d'extension pour cela:

enum TestEnum
    {
        Stackoverflow,
        overflowStack,
        stackstack
    }

TestEnum val = TestEnum.overflowStack;

Console.WriteLine(val.IsAny(TestEnum.stackstack, TestEnum.Stackoverflow));  //false
Console.WriteLine(val.IsAny(TestEnum.overflowStack, TestEnum.Stackoverflow)); // true


0 commentaires

1
votes

Je ne sais pas vraiment beaucoup sur .NET 4.0 (en utilisant 3,5 pour l'instant) mais je pense qu'il n'y a aucun moyen d'obtenir effet pur.krome veux.

mais une approximation de ce type de comparaison peut être obtenue en utilisant Tableaux et méthodes d'extension LINQ fournit. P>

Voici le petit exemple. P>

if (baa.IsOneOf(5, 7, 9, 10))
{
    Console.WriteLine(@"bingo int");
}


0 commentaires

0
votes

Un moyen de plus de faire est de séparer les règles et la logique qui doit être effectuée lorsque tout / tous sont tristes en: xxx

alors, vous pouvez consommer le Règle par le .ny () et / ou tous () pour effectuer les opérations pertinentes comme: xxx

hth


0 commentaires

0
votes

Je pense qu'une meilleure question est de savoir pourquoi se soucie du tout à ce sujet? Il est clair car il se trouve. Je parie si vous avez posté plus de votre code, il y aurait beaucoup d'autres choses à traiter d'abord.


0 commentaires