OU opérateur en C#
Puis-je obtenir
if (a == "b" || "c")
au lieu de
if (a == "b" || a== "c")
?
Êtes-vous sûr que vous souhaitez utiliser | opérateur (ou binaire) au lieu de || (ou logique)?
... voulez-vous dire || opérateur?
correct! J'ai édité le post.
L'opérateur | est pas exclusivement un opérateur binaire en C#, il a encore un objectif important: stackoverflow.com/questions/579352/calling-methods-inside-if-c/...
| est à la fois logique et binaire, selon l'expression, mais il évalue à la fois les côtés, de sorte que le code n'était pas le code par défaut, il était encore correcte.
... voulez-vous dire || opérateur?
correct! J'ai édité le post.
L'opérateur | est pas exclusivement un opérateur binaire en C#, il a encore un objectif important: stackoverflow.com/questions/579352/calling-methods-inside-if-c/...
| est à la fois logique et binaire, selon l'expression, mais il évalue à la fois les côtés, de sorte que le code n'était pas le code par défaut, il était encore correcte.
OriginalL'auteur Saif Khan | 2009-05-05
Vous devez vous connecter pour publier un commentaire.
Pas, vous pouvez le faire:
si vous avez la LINQ extensions disponibles, mais ce n'est guère une amélioration.
En réponse au commentaire à propos de la performance, voici quelques notions de code de timing. Notez que le code doit être considérée d'un œil critique, j'ai peut-être fait des choses ici qui faussent les timings.
Les résultats de la première:
Tout le code a été exécuté à deux reprises, et ne passent nr. 2 a été signalé, pour supprimer JITting généraux à partir de l'équation. Les deux passes exécutées chaque type de contrôle d'un million de fois, et exécuté à la fois où l'élément à trouver a été l'un des éléments de la trouver (c'est le if à l'exécution de son bloc), et une fois où l'élément n'a pas été (le bloc ne serait pas exécuter). Les horaires de chacun est rapporté. Je l'ai testé à la fois un pré-construit tableau et qui est intégrée à chaque fois, cette partie, je ne suis pas sûr combien le compilateur déduit et optimise loin, il y a peut être une faille ici.
Dans tous les cas, il apparaît que l'utilisation d'un interrupteur de la déclaration, avec ou sans stage la chaîne en premier, donne à peu près les mêmes résultats que la simple ou de l'instruction, qui est attendue, alors que le tableau de la recherche est beaucoup plus coûteux, ce qui pour moi était également prévu.
Merci de bricoler avec le code, et de corriger (ou un commentaire) si il y a des problèmes.
Et voici le code source, plutôt longue:
OriginalL'auteur Lasse Vågsæther Karlsen
Bien, le plus proche que vous pouvez obtenir est:
Je recommande cette solution au lieu de cela. Tout d'abord, il est plus lisible. Deuxièmement, il a moins de frais généraux. Troisièmement, si la logique a changer dans le futur, il est plus facile à maintenir.
Accepté de répondre peuvent s'adapter le plus agréable sur une seule ligne, mais celui-ci n'a pas allouer plus de mémoire pour un tableau.
Je dirais que la possibilité donnée à la question "si(a == "b" || a== "c")" - est le plus proche que vous pouvez obtenir et qui est - à mon avis - une meilleure solution que l'introduction de la déclaration.
OriginalL'auteur Guffa
À ma connaissance, ce n'est pas une option.
OriginalL'auteur Ian Jacobs
Vous pouvez utiliser des Expressions Régulières:
Si le contenu de "a" peut être plus long qu'un caractère utiliser ceci:
OriginalL'auteur TruthStands
Non, pas avec cette syntaxe. Mais il existe de nombreuses options pour le code.
Peut-être vous pourriez faire quelques surcharge d'opérateur et d'obtenir votre syntaxe de travail, mais cela dépend vraiment de ce que vous voulez atteindre et il est difficile de dire à partir de votre exemple simple.
OriginalL'auteur Daniel Brückner
Vous pouvez, dans certaines situations. À savoir, marqué d'énumérations:
est équivalent à :
La raison pour laquelle cela a à faire avec des masques de bits. En binaire,
Ainsi, lorsque nous utilisons l'opérateur|, nous faisons un bit-par-bit de comparaison de regarder pour tout 1 dans la colonne et de les copier dans le résultat. Si il n'y a pas 1 dans la colonne, de la copie d'un 0.
Puis, quand nous appliquons le & opérateur, nous recherchons 1 dans toutes les lignes de chaque colonne avant de copier un 1.
Qui est > 0, donc renvoyer true.
Curieusement, c'est le moyen le plus efficace de le faire, car il vous permet d'économiser une comparaison numérique (>) et un opérateur logique (||), qui fait tout ce que la fantaisie d'un court-circuit et autres joyeusetés.
OriginalL'auteur Daniel Moore
Non, ce n'est pas la façon dont l'opérateur ou (||) travaille en C#.
Une autre solution, si elle rend le code moins lisible, est de créer une fonction qui vérifie la valeur que vous voulez, quelque chose de similaire à:
OriginalL'auteur Jake Basile