我正在尝试学习变量类型之间的转换如何工作。现在,我正在寻找在Try / Catch中使用一个转换(对于无法转换的值)。有没有办法获得一个值的字符串表示(从TextBox获得),将其转换为测试类型,然后看看如何转换为循环中的所有其他VB标准类型?如果有资源已经做到这一点,甚至会更好。
我可以这样做,但代码非常接近重复,我希望有一种循环来简化和缩短它。
答案 0 :(得分:0)
首先,VB.net中没有variable type
这样的东西。可能让你与object variables
混淆 - 但这不是一回事
Dim o As Object
o = 1 ' integer
o
中存储的类型仍为integer
。盒装。
Dim i As Integer = CInt(o)
你刚刚取消了它。它的工作原理是object
类型最少而其他所有类型都来自它。因此,它可以“装箱”任何其他类型。
在UI中,我们使用文本框来收集数据。文本框只能包含字符串。除非您将这些字符串写入txt
或xml
这样的文件,否则通常需要将这些字符串转换为您在应用程序中使用的类型。
Dim port as Integer = Convert.ToInt32(txtPort.Text)
这不是您可以确定的区域,该文本框中的类型。你真的需要提前知道 - 你在那里期待什么?您可以使用
测试文本是否属于某种类型Integer.TryParse
Date.TryParse
.....TryParse
.............
但问题是,有些数据可以成功地将此测试从多种类型传递出来。
答案 1 :(得分:0)
好问题。虽然可以声明类型为type
的变量并在循环中使用它们,但这些变量不能用于声明或DirectCast。
Dim types() As Type = {GetType(Integer), GetType(Double)}
Dim testType As Type = GetType(Double)
最简单的方法可能是单独测试每个值(尽管你可能想要为每个或所有项目尝试一次)。
Dim xInteger As Integer
xInteger = TextBox1.Text
s &= "Integer: " & xInteger.ToString & vbcrlf ' or some test
Dim xDouble As Double
xDouble = TextBox1.Text
s &= "Double" & ": " & xDouble.ToString & vbcrlf
...