为什么C#中没有String.IsNumeric函数

我很想知道为什么C#语言团队没有在String对象上提供IsNumeric函数? IsNumeric函数在Int32.TryParse函数的String对象上更合适。

注意:我问这个问题,因为我发现很难向初学者解释这个问题,我不喜欢他们为此诅咒C#!

更新:请问,这个问题不是关于如何实现IsNumeric函数。

像这样的方法的问题在于决定什么算作“数字”。 如果它允许小数点,它是否应该允许前导空格,它是否应该有一个数字位数的上限?

Int32.TryParse回答了更明确定义的问题,“这是Int32的有效字符串表示吗?”

当然,没有什么能阻止你编写自己的扩展方法,它根据你自己的规则决定一个字符串是否为数字。

因为可以有很多function,所以可以找到有用且绝对需要的function。

IsNumeric() IsAlpha() IsAlphaNumeric() IsEmailAddress() IsGuid() ... 

等等。 任何人都可以轻松添加他认为绝对需要的十几种方法。 框架只是为了保持通用性,并为您提供基本工具来完成您的工作,并可能根据需要构建您的额外工具。

也就是说,只需添加扩展方法即可。

在您放入类的方法和其他类更好地执行的操作之间必须有一条线。

如果有IsNumeric方法,其他人可能会要求IsValidPhoneNumber,IsValidEmailAddress,IsValidURI甚至IsValidZipCodeInNewZealand方法…所有这些方法可能更好地在他们自己的域中实现。

我认为Int32.TryParse背后的逻辑是Int32类知道什么是有效的32位整数,而String类根本不知道什么是数字。

这背后的原理是一个对象可以最好地检查自己是否可以将某些东西视为/转换为该特定对象。

IIRC有Char.IsDigit(char c);

因此,我认为应该工作:

 string _temp = "12341234"; bool _isNumeric = _temp.ToCharArray().All(x => Char.IsDigit(x)); 

如果你愿意,你可以将其作为扩展方法包装。

旁注:您可以随时实现自己的:

 public static class StringExtensions { public static Boolean IsNumeric(this String s) { // your own definition goes here } }