Vb.net 将字符串转换为int16

Vb.net 将字符串转换为int16,vb.net,type-conversion,Vb.net,Type Conversion,我面临一个“荒谬”的问题。 我试图将字符串转换为int16(我被迫在int16中进行转换,而不是在int32/integer中进行转换)。 我的第一个想法是尝试: convertedVal = Convert.ToInt16(newVal) 引发异常:值对于UInt16太大或太小。 但是我的字符串是“10”,所以它介于minValue和maxValue之间。 我使用以下方法解决了我的问题: convertedVal = Int16.Parse(newVal) 'TryParse works a

我面临一个“荒谬”的问题。
我试图将字符串转换为int16(我被迫在int16中进行转换,而不是在int32/integer中进行转换)。
我的第一个想法是尝试:

convertedVal = Convert.ToInt16(newVal)
引发异常:值对于UInt16太大或太小。
但是我的字符串是“10”,所以它介于minValue和maxValue之间。
我使用以下方法解决了我的问题:

convertedVal = Int16.Parse(newVal) 'TryParse works also
虽然我解决了我的问题,但我不明白我做错了什么。
谁能给我解释一下为什么会这样


感谢您的时间

如果字符串上有额外的空间,通常会发生这种情况,因此最好
修剪它

convertedVal = Convert.ToInt16(newVal.Trim())

这两种方法应根据具体情况相同

使用
ToInt16(String)
方法相当于将值传递给
Int16.Parse(String)
方法。值通过使用当前线程区域性的格式约定进行解释


你从哪里得到这个字符串的?
如果它来自用户输入,我不太相信他/她键入正确的int16值来使用转换或解析方法

使用TryParse可以生成更健壮的代码

Dim result as Short
Dim newVal as String = "10 sadaas"
if Int16.TryParse(newVal, result) = False then
    result = 0
end if

虽然我不相信你,因为我的字符串值只有10,没有空格(我验证了),你的修剪技巧奏效了!!!你知道为什么吗?(修剪前:?val“10”修剪后:?val“10”非常奇怪,如果newVal=newVal.trim()
,你能测试一下这个
吗?哇,太奇怪了,上面的代码没有经过测试。当我试着测试这个代码时,
Dim x as String=“10”
然后
Dim y as Int16=Convert.ToInt16(x)
仍然给出10。我的意思是它没有例外。@bendataclear:我测试了它并给出了true。有趣的是,删除代码并重新编写convertedVal=Convert.ToInt16(newVal),现在就可以了!!!。没有修剪!!!所以根本没有问题。这好像从来没有发生过。我没有碰过xml(字符串值).所以我认为我需要喝咖啡并重新启动(pc和我自己)只要放下
Convert
类,这是一个可怕的构造,本来就不应该存在。通过使用正确的强制转换或
XYZ进行转换。{Try}Parse
方法。它来自一个xml文件。因此值只是一个字符串:10,我必须将其放入一个类型int16中。我肯定会遵循Parse方法,因为它从一开始就给出了正确的结果