2009-12-14 12 views
5

Ich habe ein String-Array. Was ist der einfachste Weg ist zu prüfen, ob alle Elemente des Arrays sind ZahlenDer einfachste Weg, um Zahlen zu überprüfen

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

Bitte definieren Nummer: its a int32, dezimal, float-Punkt? –

Antwort

6

Wenn Sie einen Verweis auf die Microsoft.VisualBasic Baugruppe hinzufügen, können Sie die folgenden Einzeiler verwenden:

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

Clever +1 ... out-of-the-Box Denken –

+2

+1, schreckt mir diese Idee, aber, Hölle, es funktioniert =) –

+1

Warum etwas, das so spezifisch für VisualBasic scheint? – davidfowl

4

Try this:

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

Schöne Idee, aber das funktioniert nur, wenn alle Zahlen in einem Int32 passen. – Konamiman

+0

In diesem Fall sollte double.TryParse funktionieren. –

2

die Tatsache verwenden, dass ein String ist auch ein Array von Zeichen, könnten Sie etwas tun dies wie:

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

Dies funktioniert jedoch nicht mit Strings, die Leerzeichen enthalten. Und wie steht es mit der wissenschaftlichen Notation? –

+0

scheint, müssen wir definieren, was eine Nummer ist zuerst =) –

+2

Kona ... was ist mit -1? Das ist kein Downvote: P Nur eine Frage;) –

6

Sie können dies tun:

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

Warum der anonyme Downvote? –

1

oder ohne Linq ...

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

Warum nicht linq verwenden? Du kannst mit dem Schreiben deiner eigenen TryParse-Methode fortfahren :) – Kamarey

+2

Weil unser böser Boss uns zwingt, C# 2.0 zu benutzen;) – Carra

3

Wie sei es mit regulären Ausdrücken?

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

TryParse

Verwandte Themen