Est-il un C# À l'opérateur?
En SQL, vous pouvez utiliser la syntaxe suivante:
SELECT *
FROM MY_TABLE
WHERE VALUE_1 IN (1, 2, 3)
Est-il un équivalent en C#? L'IDE semble reconnaître "dans" comme mot-clé, mais je ne semble pas être en mesure de trouver des informations sur elle.
Donc, est-il possible de faire quelque chose comme ce qui suit:
int myValue = 1;
if (myValue in (1, 2, 3))
//Do something
Au lieu de
int myValue = 1;
if (myValue == 1 || myValue == 2 || myValue == 3)
//Do something
- J'ai édité un peu de clarifier ce que j'essayais de comparer
- case à une autre réponse ajoutée par moi
- Cela a déjà été posée plusieurs fois sur stackoverflow...
- si cette question a été posée avant le marquer comme un doublon et poster une réponse avec le lien de la question d'origine, ne laisse pas un commentaire négatif
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez écrire .Ensuite vous pouvez créer une extension qui vous permet de le faire.
List.Contains()
est je crois ce que vous cherchez. C# ain
keyword
et pas unoperator
qui sert le but complètement différent que ce que vous faites référence dans SQL.Il y a deux façons vous pouvez utiliser
in
mot-clé en C#. Supposons que vous disposez d'un string[] ou de la Liste en C#.Se référant à vos modifier, je mettrais votre code de cette façon de faire ce que vous avez besoin.
Vous pouvez faire ceci:
Vous utilisez habituellement la
Contains
méthode de une collection.J'espère que cela aide.
Il n'y a pas d'opérateur "in" en C#, le "en" mot-clé est utilisé uniquement avec "foreach (... à ...)" ou "à partir de ... à ...".
LINQ équivalent de votre requête SQL serait:
Doublon de : LINQ to SQL et non pas dans
ou
L'équivalent de DANS et PAS DANS les requêtes LINQ to SQL serait quelque chose comme ceci:
et ce:
Je suis d'accord que la meilleure façon de mettre En oeuvre l'opérateur est avec une Méthode d'Extension. J'ai fait un peu différemment:
La différence, c'est que vous n'avez pas à mettre des guillemets autour de chaque valeur, que l'ensemble des délimité par des virgules, des valeurs, ce qui est plus facile à taper:
public static bool In(this string str, params string[] stringSet)
et de l'appeler commebool result = myString.In("Val1", "Val2", "Val3")
Vous pouvez écrire une extension. J'ai écrit une seule fois auparavant, pour faire un code comme
plus lisible avec une extension s.t. on a pu écrire
Voici la code:
C'est l'une de mes besoins pour le moment, mais vous pouvez l'adapter et modifier pour qu'il corresponde plus de types différents.
Pour les chiffres de 0 à 9:
Pour tout les autres Trucs:
Pour la mise à jour de votre question, vous pouvez également utiliser un interrupteur d'instruction.
Il n'y a pas d'opérateur qui recherche une valeur dans une collection, c'est plutôt une méthode de la collection, appelée
Contains
.La plus évolutive de la solution est d'utiliser un
HashSet
que la collection. Recherche d'une valeur dans unHashSet
est proche d'un O(1) fonctionnement, comparé à le faire dans unList
où il est un O(n) opérations. Cela signifie que vous pouvez emballer beaucoup de valeurs dans unHashSet
et c'est toujours rapide, tandis que la recherche d'une valeur dans unList
devient plus lent plus les valeurs que vous avez.Exemple:
Commun, LINQ façon de plus en plus puissants:
La
in
mot-clé dans le C# est pour leforeach
déclaration et pour les expressions de requête LINQ. Il n'existe aucune fonctionnalité équivalente à SQLin
opérateur en C# en soi, mais LINQ offre des fonctionnalités similaires àContains()
.- Je faire quelque chose comme ceci: