2011-07-03 43 views

回答

0

如果你的數字是一個字符串,你可能會得到字符串字符數組,並檢查每個字符是否爲Char.IsNumber

檢查第一個字符是否爲' - '以允許負數,如果您需要它們並添加try/catch塊來防止數字超過範圍(int min/max值)。如果您不必處理接近最小/最大值的數字,請考慮設置最大長度(可能是6-7位數字),然後只需檢查string.Length

如果你遇到的唯一有效的int s和無效的機會是罕見的無效操作,你可以堅持一個簡單的try/catch塊(請參閱我對ctackes答案的評論)。

+0

什麼' 「-1」'? – user7116

+0

''4697357344197412413772951060481818689355170685471900754944636793「'? – jason

+0

取決於他期待的數字。檢查標誌是微不足道的添加。爲了保護數量不大,他可以使用try/catch塊。這根本不應該發生,這取決於用例。 – Zebi

3

你是什麼意思的「驗證」?你的意思是解析沒有投擲?

static bool TryParse(string s, out int value)   
{ 
    try 
    { 
     value = int.Parse(s); 
     return true; 
    } 
    catch 
    { 
     value = 0; 
     return false; 
    } 
} 
+0

這也有它的警告。如果有足夠的非int字符串,則可能會出現性能問題,因爲異常提升非常昂貴。我曾經使用過類似的模式,在某些情況下會減慢整個用戶界面。 – Zebi

1
public static bool IsInt(string s) { 
    bool isInt = true; 
    for (int i = 0; i < s.Length; i++) { 
     if (!char.IsDigit(s[i])) { 
      isInt = false; 
      break; 
     } 
    } 
    return isInt; 
} 

實施例:

string int32s = "10240"; 
bool isInt = IsInt(int32s); // resolves true 

或者:

string int32s = "1024a"; 
bool isInt = IsInt(int32s); // resolves false 
3
static bool TryParseImpl(string s, int start, ref int value) 
    { 
    if (start == s.Length) return false; 
    unchecked { 
     int i = start; 
     do { 
     int newvalue = value * 10 + '0' - s[i++]; 
     if (value != newvalue/10) { value = 0; return false; } // detect non-digits and overflow all at once 
     value = newvalue; 
     } while (i < s.Length); 
     if (start == 0) { 
     if (value == int.MinValue) { value = 0; return false; } 
     value = -value; 
     } 
    } 
    return true; 
    } 

    static bool TryParse(string s, out int value)   
    { 
    value = 0; 
    if (s == null) return false; 
    s = s.Trim(); 
    if (s.Length == 0) return false; 
    return TryParseImpl(s, (s[0] == '-')? 1: 0, ref value); 
    } 

演示:http://ideone.com/PravA

2

當初相同問題。試試這個:

static bool numParser(string s) 
{ 
    foreach (char c in s) 
    if (!char.IsNumber(c)) 
     return false; 
    return true; 
} 
+0

不計算標誌。而是使用IsDigit。根據MSDN的說法:'除了包含數字,數字還包括字符,分數,下標,上標,羅馬數字,貨幣分子和圈出的數字。 –