2009-12-14 43 views
5

Tôi có một mảng chuỗi. cách đơn giản nhất để kiểm tra xem tất cả các yếu tố của mảng là sốCách dễ nhất để kiểm tra số

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

xin vui lòng, xác định số: nó một int32, số thập phân, float-điểm? –

Trả lời

6

Nếu bạn thêm một tham chiếu đến assembly Microsoft.VisualBasic, bạn có thể sử dụng sau một liner:

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

Clever +1 ... out-of-the-box suy nghĩ –

+2

+1, ý tưởng này làm tôi sợ, nhưng, địa ngục, nó hoạt động =) –

+1

Tại sao lại sử dụng một cái gì đó có vẻ rất cụ thể cho VisualBasic? – davidfowl

4

Hãy thử điều này là gì:

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

Ý tưởng hay, nhưng điều này sẽ chỉ hoạt động nếu tất cả các số nằm trong Int32. – Konamiman

+0

Trong trường hợp đó, double.TryParse sẽ hoạt động. –

2

Sử dụng thực tế là một chuỗi cũng là một mảng ký tự, bạn có thể làm điều gì đó như thế này:

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

Nhưng điều này sẽ không hoạt động với các chuỗi có chứa khoảng trắng. Và làm thế nào về ký hiệu khoa học? –

+0

dường như chúng ta cần phải xác định một số đầu tiên là gì =) –

+2

Kona ... khoảng -1? Đó không phải là một downvote: P Chỉ cần một câu hỏi;) –

6

Bạn có thể làm điều này:

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

Tại sao bạn lại bỏ phiếu ẩn danh? –

1

Hoặc không LINQ ...

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

Tại sao không sử dụng LINQ? Bạn có thể tiếp tục bằng cách viết phương thức TryParse của riêng bạn :) – Kamarey

+2

Bởi vì ông chủ ác của chúng tôi buộc chúng tôi sử dụng C# 2.0;) – Carra

3

Làm thế nào về việc sử dụng biểu thức thông thường?

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

TryParse

Các vấn đề liên quan