2009-12-14 12 views
5

Ho un array di stringhe. Qual è il modo più semplice per verificare se tutti gli elementi dell'array sono numeriIl modo più semplice per controllare i numeri

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

per favore, definire il numero: il suo un Int32, decimale, float-point? –

risposta

6

Se si aggiunge un riferimento all'assembly Microsoft.VisualBasic, è possibile utilizzare il seguente one-liner:

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

Clever +1 ... il pensiero immediato –

+2

+1, questa idea mi spaventa, ma, diavolo, funziona =) –

+1

Perché utilizzare qualcosa che sembra così specifico per VisualBasic? – davidfowl

4

Prova questa:

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

Bella idea, ma funzionerà solo se tutti i numeri rientrano in un Int32. – Konamiman

+0

In questo caso, double.TryParse dovrebbe funzionare. –

2

sfruttando il fatto che una stringa è anche una serie di caratteri, si potrebbe fare qualcosa in questo modo:

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

Ma questo non funzionerà con stringhe che contengono uno spazio bianco. E che dire della notazione scientifica? –

+0

sembra che dobbiamo definire che cosa è un numero prima =) –

+2

Kona ... che dire di -1? Questo non è un downvote: P Solo una domanda;) –

6

Si può fare questo:

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

Perché il downvote anonimo? –

1

O senza LINQ ...

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

Perché non usare linq? Puoi continuare a scrivere il tuo metodo TryParse :) – Kamarey

+2

Perché il nostro capo malvagio ci costringe a usare C# 2.0;) – Carra

3

ne dite di usare le espressioni regolari?

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

TryParse

Problemi correlati