有人提議用int.Parse(string)的方法,然後通過捕獲異常來判斷返回的值。更好的方法是用正則表達式:
public int IsNumeric(string str)
{
int i;
if(str != null && Regex.IsMatch(str,@"^d+$"))
i = int.Parse(str);
else
i = -1;
return i;
}
這應該是個好辦法。不過如果要提出更高的要求,例如不僅要判斷字符串是否全為數字,還要在判斷後,要求將其進行轉換。那麼上述函數就有缺陷,因為在上面的正則表達式中無法判斷‘-’符號。因此上面的函數只能轉換非負數。尤有甚者,要求轉換的不僅是整數,還包括浮點數,尤其是科學計數法的字符串,例如:string s = "-3.14159E+10"
這裡面的E、.、+等字符,都是比較特殊的,而且還要求它們出現的位置要符合浮點數或科學計數方法的規定。那麼就不能使用正則表達式了,至少很麻煩(我是這樣認為的,或許有好的方法)。問題還是回到最初的解決方案,就是使用Parse()方法和捕獲異常。以下是實現此功能的方法:
public bool IsNumeric(string s, out double result)
{
bool bReturn = true;
try
{
result = double.Parse(s);
}
catch
{
result = 0;
bReturn = false;
}
return bReturn;
}
例如調用:
string s1="abc";
string s2="-3.14159E+10";
double d1,d2;
bool ty1 = IsNumeric(s1,out d1);
bool ty2 = IsNumeric(s2,out d2);
結果:
ty1=false;d1=0;
ty2=true;d2=31415900000
說明:因為涉及到浮點數,就不能使用-1來做為出現錯誤的返回值,如前面的例子。也就是說本方法有兩個返回值,一個是判斷轉換是否成功,為bool型;另一個是轉換成功後的浮點數值。我用out來解決該問題。
本方法仍然適合整型,只需對返回值進行強制轉換即可。
在VB中原有一個 inumeric函數來判斷