任何有效的TryParse或IsNumeric,后缀为U u L l UL Ul uL ul LU Lu lU lu .NET

时间:2015-09-21 02:25:57

标签: .net vb.net integer literals

我如何检查字符串值是否为数字似乎仍然失败,因为它附加了后缀。

这就是我的后缀 https://msdn.microsoft.com/en-us/library/aa664674(v=vs.71).aspx

Dim value As String = "4294967295U"

If IsNumeric(value) Then
    MsgBox "is number"
End If

Dim val as UInteger
If UInteger.TryParse(value, num) Then
    MsgBox "is number also"
End If

3 个答案:

答案 0 :(得分:1)

当您在代码中将数值声明为常量时使用后缀 - 让编译器知道它应该将该数字视为哪种类型。这是必要的,因为 <appSettings> <add key="myDBEntities" value="metadata=res://*/myDBModel.csdl|res://*/myDBModel.ssdl|res://*/myDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=myServer\test;initial catalog=myDB;user id=myDBUser;password=PASS==; multipleactiveresultsets=True;App=EntityFramework&quot; providerName=System.Data.EntityClient;" /> </appSettings> 可能意味着1intuintlongulong等等。< / p>

当您使用byte时,没有必要这样做,因为您已经使用过课程(TryParse已经开启TryParse)知道你期望输入代表什么类型。所以它应该只是数字,没有后缀。

答案 1 :(得分:1)

根据您的输入,您可以在执行检查之前清除任何已知的前缀/后缀。查看您提供的单个示例,您可以使用TrimEnd删除尾随U

Dim knownSuffixes = New Char() {"U"c}

If IsNumeric(value.TrimEnd(knownSuffixes)) Then
    MsgBox "is number"
End If

这里你应该注意边缘情况。我不知道你正在寻找什么样的输入。例如,1234UUUUUU输入无效吗?如果是这样,这会给你误报。

另一种可能更强大的方法是使用正则表达式来准确指定预期的字符序列。

答案 2 :(得分:0)

感谢Asad的回答,这很好用

Dim value as String = "4294967295U"
value = value.TrimEnd(New Char() {"U", "u", "L", "l"})
If IsNumeric(value) Then
    'Yes is number now :)
Else
    'Boo!
End If

可以使用.ToLowerCase()或.ToUpperCase()将其链接到只有2个元素。