2009-12-14 6 views
5

J'ai un tableau de chaînes. Quelle est la façon la plus simple de vérifier si tous les éléments du tableau sont des nombresLe moyen le plus simple de vérifier les numéros

string[] str = new string[] { "23", "25", "Ho" }; 
+8

s'il vous plaît, définir le nombre: une int32, décimal, float point? –

Répondre

6

Si vous ajoutez une référence à l'ensemble Microsoft.VisualBasic, vous pouvez utiliser le one-liner suivant:

bool isEverythingNumeric = 
    str.All(s => Microsoft.VisualBasic.Information.IsNumeric(s)); 
+0

Clever + 1 ... out-of-the-box pensant –

+2

+1, cette idée me fait peur, mais bon sang, ça marche =) –

+1

Pourquoi utiliser quelque chose qui semble si spécifique à VisualBasic? – davidfowl

4

Essayez ceci:

string[] str = new string[] { "23", "25", "Ho" }; 
double trouble; 
if (str.All(number => Double.TryParse(number, out trouble))) 
{ 
    // do stuff 
} 
+0

Bonne idée, mais cela ne fonctionnera que si tous les nombres rentrent dans un Int32. – Konamiman

+0

Dans ce cas, double.TryParse devrait fonctionner. –

2

En utilisant le fait qu'une chaîne est aussi un tableau de caractères, vous pouvez faire quelque chose comme ceci:

str.All(s => s.All(c => Char.IsDigit(c))); 
+0

Mais cela ne fonctionnera pas avec les chaînes contenant des espaces blancs. Et que diriez-vous de la notation scientifique? –

+0

semble que nous devons définir quel est le premier nombre =) –

+2

Kona ... qu'en est-il -1? Ce n'est pas un downvote: P Juste une question;) –

6

Vous pouvez faire ceci:

var isOnlyNumbers = str.All(s => 
    { 
     double i; 
     return double.TryParse(s, out i); 
    }); 
+0

Pourquoi le downvote anonyme? –

1

ou sans LINQ ...

bool allNumbers = true; 
foreach(string str in myArray) 
{ 
    int nr; 
    if(!Int32.TryParse(str, out nr)) 
    { 
     allNumbers = false; 
     break; 
    } 
} 
+0

Pourquoi ne pas utiliser linq? Vous pouvez continuer à écrire votre propre méthode TryParse :) – Kamarey

+2

Parce que notre boss maléfique nous oblige à utiliser C# 2.0;) – Carra

3

Comment l'utilisation des expressions régulières?

using System.Text.RegularExpressions; 
... 
bool isNum= Regex.IsMatch(strToMatch,"^\\d+(\\.\\d+)?$"); 

TryParse

Questions connexes