【问题标题】:Conversion of VB Variable TypesVB变量类型的转换
【发布时间】:2015-09-26 12:46:10
【问题描述】:

我正在尝试学习如何在变量类型之间进行转换。现在,我正在考虑在 Try/Catch 中使用一个转换(对于无法转换的值)。有没有办法让一个值的字符串表示(从 TextBox 获得),将其转换为测试类型,然后查看它如何在循环中转换为所有其他 VB 标准类型?如果有资源已经这样做了,那就更好了。

我可以这样做,但代码非常接近重复,我希望有某种循环来简化和缩短它。

【问题讨论】:

  • 通常会发生转换,因为用户提交文本并且代码/应用程序转换为特定的其他类型(int、date 等)。通常没有选择,所以更多的解释和一些示例代码会很好。

标签: vb.net type-conversion


【解决方案1】:

好问题。虽然可以声明 type 类型的变量并在循环中使用它们,但这些变量不能在声明或 DirectCast 中使用。

Dim types() As Type = {GetType(Integer), GetType(Double)}
Dim testType As Type = GetType(Double)

最简单的方法可能是像这样单独测试每个值(尽管您可能需要对每个或所有项目进行 try-catch)。

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
...

【讨论】:

    【解决方案2】:

    首先,VB.net 中没有variable type 这样的东西。可能你对object variables 感到困惑——但这不是一回事

    Dim o As Object
    o = 1 ' integer
    

    o 中存储的类型仍然是integer。它是盒装的。

    Dim i As Integer = CInt(o)
    

    您刚刚拆箱。它之所以有效,是因为object 是最低的类型,而所有其他类型都派生自它。因此,它可以“装箱”任何其他类型。

    在 UI 中,我们使用文本框来收集数据。文本框只能包含字符串。除非您将这些字符串写入 txtxml 之类的文件,否则您通常需要将这些字符串转换为您在应用程序中使用的类型。

    Dim port as Integer = Convert.ToInt32(txtPort.Text)
    

    这不是您可以确定的区域,即该文本框中的类型。你真的需要提前知道 - 你在那里期待什么?您可以使用

    来测试您的文本是否属于一种或另一种类型
    Integer.TryParse
    Date.TryParse
    .....TryParse
    .............
    

    但问题是,有些数据可以通过多种类型的测试。

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 2017-09-20
      • 2020-04-19
      • 1970-01-01
      相关资源
      最近更新 更多