2009-12-14 27 views
5

Mam tablicę ciągów. Co to jest najprostszym sposobem, aby sprawdzić, czy wszystkie elementy tablicy są liczbamiNajprostszy sposób sprawdzania numerów

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

proszę określić liczbę: jego Int32, dziesiętnej, float punkt? –

Odpowiedz

6

Jeśli dodać odwołanie do zespołu Microsoft.VisualBasic, można użyć następującego jedno-liner:

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

Clever +1 ... out-of-the-box myślenie –

+2

+1, ten pomysł mnie przeraża, ale, cholera, to działa =) –

+1

Po co używać czegoś, co wydaje się tak charakterystyczne dla VisualBasic? – davidfowl

4

Spróbuj tego:

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

Przyjemny pomysł, ale zadziała to tylko wtedy, gdy wszystkie liczby mieszczą się wewnątrz Int32. – Konamiman

+0

W takim przypadku funkcja double.TryParse powinna działać. –

2

wykorzystując fakt, że ciąg jest również tablica znaków, można zrobić coś tak:

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

Ale to nie zadziała z ciągami zawierającymi białe znaki. A co z notacją naukową? –

+0

wydaje się, że musimy zdefiniować, co jest najpierw numerem =) –

+2

Kona ... co z -1? To nie jest zdanie: P Tylko pytanie;) –

6

można to zrobić:

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

Dlaczego anonimowy downwise? –

1

Albo bez LINQ ...

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

Dlaczego nie używać linq? Możesz kontynuować pisanie własnej metody TryParse :) – Kamarey

+2

Ponieważ nasz zły szef zmusza nas do używania C# 2.0;) – Carra

3

Jak na temat korzystania z wyrażeń regularnych?

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

TryParse

Powiązane problemy