2009-07-08 34 views
6

Tôi cần một hàm chỉ cần kiểm tra nếu chuỗi có thể được chuyển đổi thành số nguyên hợp lệ (để xác thực biểu mẫu).Có cách nào tốt hơn để xác định xem một chuỗi có thể là số nguyên không phải là try/catch không?

Sau khi tìm kiếm xung quanh, tôi đã kết thúc bằng cách sử dụng một hàm tôi đã có từ năm 2002 hoạt động bằng cách sử dụng C# 1 (bên dưới). Tuy nhiên, có vẻ như với tôi rằng mặc dù mã bên dưới hoạt động, đó là việc lạm dụng thử/bắt giữ để sử dụng nó không phải để bắt lỗi nhưng để xác định giá trị.

Có cách nào tốt hơn để thực hiện việc này trong C# 3 không?

public static bool IsAValidInteger(string strWholeNumber) 
{ 
    try 
    { 
     int wholeNumber = Convert.ToInt32(strWholeNumber); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 

Trả lời:

câu trả lời của John dưới đây đã giúp tôi xây dựng các chức năng sau tôi đã không try/catch. Trong trường hợp này, một hộp trống cũng được coi là một "số nguyên" hợp lệ theo hình thức của tôi:

public static bool IsAValidWholeNumber(string questionalWholeNumber) 
{ 
    int result; 

    if (questionalWholeNumber.Trim() == "" || int.TryParse(questionalWholeNumber, out result)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

Trả lời

33
if (int.TryParse(string, out result)) 
{ 
    // use result here 
} 
+2

Và dài.TryParse cho các giá trị 64 bit quá. – devstuff

5

Int32.TryParse

11

Điều này có lẽ sẽ không được nhanh hơn nhiều, nhưng ít nhất nó trông sạch hơn (không xử lý ngoại lệ):

public static bool IsAValidInteger(string strWholeNumber) 
{ 
    int wholeNumber; 
    return int.TryParse(strWholeNumber, out wholeNumber); 
} 
+2

Thực ra nó sẽ nhanh hơn đáng kể cho các tình huống mà bạn liên tục nhận được các chuỗi không hợp lệ. –

+3

Tôi nghi ngờ điều đó. Tôi chỉ là về để kiểm tra nó ... nhưng không có điểm bây giờ bởi vì kể từ khi Jon Skeet đã xác nhận nó :-) –

6

Bạn đang tìm kiếm Int32.TryParse().

public void Foo(String input) 
{ 
    Int32 number; 
    if (Int32.TryParse(input, out number)) 
    { 
     DoStuff(number); 
    } 
    else 
    { 
     HandleInvalidInput(input); 
    } 
} 

Trong trường hợp cụ thể của bạn, tôi sẽ sử dụng như sau.

public static Boolean IsValidInt32(String input) 
{ 
    Int32 number; 
    return Int32.TryParse(input, out number); 
} 
-4

Phương pháp try/catch là giải pháp hợp lệ vì nhiều loại không có phương pháp TryParse được triển khai. Vì vậy, bạn trở lại với một lựa chọn cơ bản còn lại.

+0

Điều này không trả lời câu hỏi (ví dụ: chuỗi thành số nguyên). –

+0

. Nó nói với tác giả không có lựa chọn nào tốt hơn. – User

+0

Trên thực tế cho các số nguyên có một lựa chọn tốt hơn như những người khác đã đề cập. – Residuum

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