在 VB.NET 中,IsNumeric 是一個方便的內建函數,但 C# 設計團隊刻意不提供這樣的方法。原因在於「數字」的定義極其廣泛:整數、浮點數、科學記號、貨幣格式、十六進位等,單一函數難以涵蓋所有情境。C# 傾向於讓開發者根據具體需求選擇合適的驗證策略。
若僅需驗證非負整數,正則表達式是效能不錯的選擇:
public int IsNumeric(string str)
{
int i;
if (str != null && Regex.IsMatch(str, @"^\d+$"))
i = int.Parse(str);
else
i = -1;
return i;
}
缺點:無法處理負號、小數點、科學記號(如 -3.14159E+10),擴展性差。
.NET Framework 2.0 引入 TryParse 系列方法,避免了例外處理的效能開銷,是現代 C# 的首選:
public bool IsNumeric(string s, out double result)
{
return double.TryParse(s, out result);
}
優點:
bool 表示成功與否,out 參數攜帶轉換結果// 僅驗證 32 位元整數
if (int.TryParse(input, out int intVal)) { ... }
// 僅驗證雙精度浮點數,允許特定格式
if (double.TryParse(input, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out double dblVal)) { ... }
TryParse 會嘗試轉換並溢位返回 false,但極長字串解析仍有 CPU 成本)TryParse(極罕見)double.TryParse / int.TryParse / decimal.TryParse——標準、快速、語意清晰。Regex 或 NumberStyles 微調。Parse + try-catch 作為常規驗證手段,例外處理成本高且語意不清。掌握 TryParse 模式,即能優雅解決 99% 的「字串轉數字」驗證需求。