5

我遇到了一个“荒谬”的问题。
我试图将字符串转换为 int16(我被迫在 int16 中而不是在 int32/integer 中执行此操作)。
我的第一个想法是尝试:

convertedVal = Convert.ToInt16(newVal)

这引发了异常:对于 UInt16,值太大或太小。
但我的字符串是“10”,所以它在 minValue 和 maxValue 之间。
我使用以下方法解决了我的问题:

convertedVal = Int16.Parse(newVal) 'TryParse works also

虽然我解决了我的问题,但我不明白我做错了什么。
有人可以向我解释为什么会这样吗?

谢谢你的时间

4

3 回答 3

5

如果字符串上有额外的空间,通常会发生这种情况,所以Trim更好

convertedVal = Convert.ToInt16(newVal.Trim())
于 2012-11-01T11:12:15.573 回答
2

根据MSDN 页面,这两种方法应该是相同的

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

于 2012-11-01T11:23:18.300 回答
1

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

使用 TryParse 会产生更健壮的代码。

Dim result as Short
Dim newVal as String = "10 sadaas"
if Int16.TryParse(newVal, result) = False then
    result = 0
end if
于 2012-11-01T11:26:09.877 回答