代码之家  ›  专栏  ›  技术社区  ›  pradeeptp

为什么C中没有string.isNumeric函数#

c#
  •  5
  • pradeeptp  · 技术社区  · 16 年前

    我只是好奇为什么C语言团队没有在字符串对象上提供isNumeric函数?.IsNumeric函数在Int32.Trparse函数的字符串对象上更合适。

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

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

    6 回复  |  直到 16 年前
        1
  •  17
  •   Mark Heath    16 年前

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

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

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

        2
  •  4
  •   user151323    16 年前

    因为有很多功能,人们可以找到有用的和绝对需要的。

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

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

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

        3
  •  3
  •   Timbo    16 年前

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

    如果有isNumeric方法,其他人可能会要求isvalidPhoneNumber、isvalidEmailAddress、isvalidUri,甚至是isvalidZipCodeInWZealand方法…所有这些都可以更好地在自己的领域中实现。

        4
  •  3
  •   Dirk Vollmar    16 年前

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

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

        5
  •  1
  •   Alex Duggleby    16 年前

    iIRC有字符isdigit(字符c);

    因此,我认为这是可行的:

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

    如果你愿意的话,你可以把它包装成一个扩展方法。

        6
  •  0
  •   cllpse    16 年前

    附带说明:您始终可以实现自己的:

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