Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么C中没有String.IsNumeric函数#_C# - Fatal编程技术网

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

C# 为什么C中没有String.IsNumeric函数#,c#,C#,我只是想知道为什么C语言团队没有在String对象上提供IsNumeric函数?。IsNumeric函数在字符串对象上比Int32.TryParse函数更合适 注:我问这个问题是因为我发现很难向初学者解释这一点,我不喜欢他们为此诅咒C 更新:请注意,这个问题不是关于如何实现IsNumeric函数。因为可以找到大量有用且绝对需要的函数 IsNumeric() IsAlpha() IsAlphaNumeric() IsEmailAddress() IsGuid() ... 等等。任何人都可以很容易

我只是想知道为什么C语言团队没有在String对象上提供IsNumeric函数?。IsNumeric函数在字符串对象上比Int32.TryParse函数更合适

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


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

因为可以找到大量有用且绝对需要的函数

IsNumeric()
IsAlpha()
IsAlphaNumeric()
IsEmailAddress()
IsGuid()
...
等等。任何人都可以很容易地增加十几个他认为绝对需要的方法。框架只是为了保持通用性,为您的工作提供基本工具,或者根据需要构建额外的工具


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

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


如果有IsNumeric方法,其他人可能会要求使用IsValidPhoneNumber、IsValidMailAddress、IsValidURI甚至IsValidZipCodeInNewZealand方法。。。所有这些都最好在他们自己的领域中实现。

这样的方法的麻烦在于决定什么是“数字”。它是否应该允许小数点,是否应该允许前导空格,是否应该有数字的上限

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


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

因此,我认为应该这样做:

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
    }
}

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


其背后的原理是,对象可以最好地检查自身是否可以将某个对象视为/转换为该特定对象。

您可以将其添加为扩展方法。:)我知道扩展方法,但这不是这里的问题,但无论如何,谢谢(:@Timbo如果你看一下互联网上其他地方关于IsNumeric函数的问题的数量,你就会明白我为什么问这个问题。这是大多数开发人员都希望在String object中看到的一个常见函数。对于那些来自其他语言/工具(如VB6)的人来说,他们希望在String object!Unfo中可以看到这个函数RTU当然,这不适用于负数或任何更复杂的数字格式,具体取决于当前用户的本地化设置。如果只允许自然数,而不允许前导或尾随空格,则表达式是有意义的。因此,这完全取决于您定义为“数字”的内容。我觉得IsNumeric函数是我们成长过程中在其他语言中使用的东西。我觉得这是绝对必要的,除非你想让我成为一名对其他对象中的替代函数有深入了解的专家!这并没有阻止MS将这些方法放在Char数据类型上。这是因为单个Char要么是数字,要么是数字不管是不是莱克特,这样的方法是有意义的