Vérifier si la chaîne est numérique en une seule ligne de code
Je travaille avec un DNN forme de renforcement module qui permet pour certains de code côté serveur pour être exécuté sur la base d'une condition. Pour mon scénario, j'ai besoin de mon bloc de code à exécuter si les 4 premiers caractères d'une certaine forme de texte sont numériques.
L'espace pour le type de la condition, cependant, est seulement une ligne et je crois que obtient injecté dans un if
déclaration de quelque part derrière les scènes, donc je n'ai pas la possibilité d'écrire un mult ligne conditionnelle.
Si j'ai un champ de formulaire appelé MyField
, je pourrais créer une condition simple comme ceci:
[MyField] == "some value"
Puis, quelque part derrière les coulisses, il se traduit en quelque chose comme if("some value" == "some value") {
Je sais que int.TryParse()
peut être utilisé pour déterminer si oui ou non une chaîne de caractères est numérique mais à chaque mise en œuvre que j'ai vu exige deux lignes de code, le premier à déclarer une variable pour contenir la conversion d'un nombre entier et la seconde pour exécuter la fonction réelle.
Est-il un moyen de vérifier pour voir si les 4 premiers caractères d'une chaîne de caractères sont numériques en une seule ligne qui peuvent exister à l'intérieur d'un if
déclaration?
- Est à l'aide d'une méthode d'extension hors de question d'utiliser
TryParse
? - certainement une méthode d'extension
- Je n'ai jamais utilisé les méthodes d'extension. Googler pour voir comment les utiliser et je vais donner un coup de feu.
- Depuis la a été injecté dans le code, je doute qu'une extension de la méthode pourrait être utilisée.
- Double Possible de Comment puis-je déterminer si une chaîne est un nombre?
- Ce n'est pas un doublon. J'ai besoin d'une solution en ligne, pas deux lignes.
- Il existe plusieurs solutions de ligne dans les réponses fournies à cette question .
- 1-liner à l'autre Q/A:
bool b1 = Microsoft.VisualBasic.Information.IsNumeric("1"); //true
if (str.Take(4).All(c => c.IsDigit()) { ... }
Vous devez vous connecter pour publier un commentaire.
L'envelopper dans un méthode d'extension.
Et de l'utiliser comme
Mise à JOUR depuis que cette question a été modifiée:
Et de l'utiliser comme
@this
comme un nom de paramètre est un très, très mauvais choix. Ne pas oublier de l'utiliser comme une extension de la méthode de paramètre. Personnellement, je trouve en utilisant des mots-clés comme paramètre, et les noms de variables comme quelque chose à éviter.input
. Personnellement, je trouve@this
très logique dans ce (pas de jeu de mots destiné) cas particulier, simplement parce qu'il montre ce que votre poste est l'extension. Mais c'est juste moi.Int64.TryParse
, mais j'ai compris l'OP commeint.TryParse
pourrait être utilisé, mais pas en une seule ligne.En réponse à ceci:
Vieille réponse:
Si vous ne pouvez pas utiliser
TryParse
, vous pouvez probablement vous en sortir avec l'aide de LINQ:Si vous le pouvez, voici un
IsNumeric
méthode d'extension, avec l'utilisation de:int
int.TryParse
. Je vais mettre à jour pour utiliserfloat.TryParse
pour la méthode d'extension. Ce problème pourrait être résolu dans beaucoup de façons (y compris les regex), la "meilleure" solution, tout dépend de ce que l'OP besoins.!string.IsNullOrEmpty
), et 2) string est numérique (ma solution)IsNumeric
méthode d'extension de ma réponse pourrait fonctionner pour vous. Il essaie simplement d'analyser la chaîne comme un flotteur, qui va gérer les décimales, les négatifs, les nombres comme1e3
, etc.Comment quelques-uns facile LinQ?