当前位置:  开发笔记 > 后端 > 正文

将字符串解析为整数(来到地狱或高水位)

如何解决《将字符串解析为整数(来到地狱或高水位)》经验,为你挑选了2个好方法。

我需要维护一个遗留的VB.NET Web应用程序.我想说,数据输入是不一致的.特别是,有些数据有时存储为整数,有时也存储为字符串,我必须可靠地将字符串解析为整数.如果解析出错,它应该总是返回0.

问题是,我不能使用任何.NET/VB.NET解析函数,但我必须依赖自制函数.

我可以使用单行标准框架调用来执行每个String-to-Integer解析任务吗?

假设有一个字符串可以为null,为空,包含类似"10"的整数表示或包含其他内容.

我用空输入字符串""尝试了这些:

CType(string, Integer) -> Conversion from string "" to type 'Integer' is not valid.
Convert.ToInt32(string) -> Input string was not in a correct format.
Integer.Parse(string) -> Input string was not in a correct format.
CInt(string) -> Conversion from string "" to type 'Integer' is not valid.
Val(string) -> Success!

但即使Val也会失败.万无一失的方式是调用自制功能:

   Public Function ToInteger(ByVal s As String) As Integer

        s = Trim(s)
        Dim i As Integer

        Try
            i = Val(s)
        Catch ex As Exception
            i = 0
        End Try

        Return i

    End Function

我觉得这很糟糕.这很糟糕,因为:

我正在尝试将字符串解析为整数!即使涉及语义,这也不是火箭科学

自制标准并不是很好.在代码中的某处,您总能找到破碎的标准框架解决方案

因此,软件中存在不必要的错误.我指责这个标准框架.除非,当然找到更好的解决方案:)


感谢所有的答案.Int32.TryParse在这里很完美.

但是如果你必须先将输入转换为字符串,那么强制转换可能会失败.就像从具有可能的DBNull值的数据库对象读取时一样.



1> Jon Skeet..:

使用Int32.TryParse并忽略返回值 - 只需使用out参数中的值即可.



2> AnthonyWJone..:

您没有说明为什么不能使用".NET/VB.Net解析函数",所以我建议: -

Public Function ToInteger(ByVal s As String) As Integer
    Dim i as Integer
    Integer.TryParse(s, i)
    Return i
End Function

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有