在开发软件时,常常需要提取一个数值,把它转换为一个字符串,显示在文本框中。另外,还需要从文本框中提取输入信息,把它转换为一个数值。这些转换操作可以用两种方式完成:隐式转换和显式转换。

隐式转换可以利用系统在运行期间提取数值,并把它转换为新类型,且不需要任何提示口VisualBasic的默认设置常常允许开发人员编写包含许多隐式转换的代码。
        显式转换要求开发人员明确指定修改变量的类型,并将它赋予另一个变量。与隐式转换不同,显式转换在代码中很容易识别。一些语言(如C#)要求,所有类型不安全的转换都通过显式转换完成,否则就会抛出一个错误。

Visual Basic的以前版本允许在不符合传统隐式转换规则的类型之间进行隐式转换。在Ⅵsual Basic的新版本中仍支持这个功能,因为Visual Basic的一个目标是支持快速的原型化。在快速原型模型中,开发人员编写的代码可能仅用于演示,但不用于部署。因为在讨论隐式转换时,应总是考虑到这对于软件开发而言并不是最佳实践方式。

即使选择允许进行隐式转换,这种转换也只能在相当有限的数据类型上进行。有时需要进行显式转换。下面的例子说明了打开Option Strict时,如何在不同的整数类型之间进行转换:

dim myShort As Short
Dim myUInt16 As Ulnt16
Dim mylnt16 As Int16
Dim mylnteger As Integer
Dim myUInt32 As UInt32
Dim mylnt32 As Int32
Dim myLong As Long
Dim mylnt64 As Int64

myShort = 0
myUIntl6= Convert.ToUlnt16 (myShort)
mylnt16=myShort
mylnteger = myShort
myUInt32 = Convert.ToUInt32 (myShort)
mylnt32 = myShort
mylnt64 = myShort

myLong = myLong.MaxValue
If myLong < Short.MaxValue Then
    myShort  = Convert.ToInt16(myLong)
End If
mylntager= CInt (myLong)
    要注意,不能把Short隐式转换为Ulnt16,或者其他无符号的类型。因为使用Option Strict后,编译器将不允许可能导致值超出范围或丢失数据的隐式转换。无符号的Short类型的最大值是有符号的Short类型的最大值的两倍,但在本例中,如果变量myShort含有-1,该值就不在无符号类型的允许范围内。即使是显式转换,如果myShort是一个负数,Convert.ToUlnt32方法就会抛出一个运行时异常。

第二个要注意的地方是共享方法MaxValue。所有的整数和小数类型都有这个方法。顾名思义,它返回特定类型的最大值。对应的MinValue方法可以获得最小值。共享属性可以从类中引用(比如Long.MaxValue),不需要实例。

最后,尽管上述代码可以编译,但不一定会正确执行。它演示了一个经典的错误,在真实的程序中,该错误常常断断续续地出现。因为最后一个转换语句不能确保赋给mylnteger的值在Integer类型的取值范围内,所以错误出现了。在一些情况下,myLong大于允许的最大值,这段代码就会抛出一个异常。

传统VB特有的转换方法有:CBooI(), CByte(), CChar(), CDate() , CDbl() ,  CDec() , Clnt(),     CLng(),CObj(),  CShort(),CSng(), CStr()

这些方法的缺点是,它们仅支持有限数量的VB专用类型口。如果与C#开发人员一起工作,他们就会被这些方法分散注意力。另外,在处理这些VB函数不支持的类型时,将无法利用CType和Convert类。处理转换的更通用方法是使用System。Convert类。

1.Parse和TryParse方法
      大多数值类型,至少是.NET Framework中的值类型,提供了一对共享方法Parse和TryParse,它们将用户选择的值作为参数,尝试把这个值转换为指定的值类型。注意,Parse和TryParse方法只能用于值类型。引用类型有对应的方法DirectCast和Cast,它们为引用变量进行了优化。

TryParse方法的工作方式类似于Parse方法,但它有两个参数,并返回一个布尔值,而不是一个数值。不应指定TryParse方法的值,而应在lf-Then语句中测试它,确定数据转换为指定的类型是否成功。如果成功,就把新值存储在传递给这个方法的第二个参数中,接着将新值赋予要保存该值的变量:

Dim converted As Long
If Long.TryParse("1001', converted) Then
      result = converted
End If

2.CType函数
      无论是否使用后期绑定,都要使用Object数据类型来传递对象引用,在需要与它们交互作用时,将它们转换为合适的类型。这尤其适合于处理使用继承或实现多接口的对象。如果关闭了Option Strict(默认值),就可以编写代码,使用Object类型的变量来调用前期绑定的方法:

Public Sub CType1(ByVal obj As Object)
      Dim local As String
      local = CType (obj,  String)
      local.ToLower ()
End Sub
3.DirectCast函数
        与CType函数非常类似的另一个函数是DirectCast,它也把一种类型的值转换为另一种类型, 但其限制比CType多,好处是比CType快一些。

DirectCast仅用于引用类型,而CType可接受引用类型和值类型。CType可以被看做是所有其他转换函数(例如CInt、CStr等)的智能组合体。而DirectCast假定源数据是可以直接转换的,不能对转换数据执行额外的步骤。

4.TryCast函数
      TryCast函数的功能与DirectCast类似,也是把一种类型的值转换为另一种类型。与DirectCast不同的是,如果转换失败,TryCast会返回Nothing,而不会抛出异常。注意,TryCast只能转换引用类型,不能处理Integer或者Boolean这些值类型。

VB 2010 (10)数据类型转换相关推荐

  1. VB.NET 二进制形式不变的数据类型转换,Short与Ushort为例

    本文讨论的数据类型转换,并非传统意义上针对数值不变的数据类型转换,即不是说数据变换了类型后其值不变. 本文讨论的是数据类型转换后,其在寄存器保存的二进制数是一样的. 以Short和Ushort为例,s ...

  2. vc数据类型转换大全

    vc数据类型转换大全 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]="程佩君& ...

  3. ADO 数据类型转换表[转]

    ADO 数据类型转换表[转] ADO 数据类型转换表 The following table shows the ADO Data Type mapping between Visual Basic, ...

  4. MYSQL 与 Oracle 之间的数据类型转换

    2009-07-21 MYSQL 与 Oracle 之间的数据类型转换 关键字: mysql, oracle, 数据类型, 转换 Table 2-4 Default Data Type Mapping ...

  5. 转:VC++常用数据类型转换

      留着方便自查 VC++数据类型转换 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]=& ...

  6. 前端JavaScript(1) --Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏...

    一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...

  7. python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)...

    一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...

  8. VC++数据类型转换小结

    说明:本文纯粹是总结一下有关类型转换的贴子, 本人并未对所有方法都做测试,仅仅是为了给大家一个参考. int i = 100; long l = 2001; float f=300.2; double ...

  9. VC++数据类型转换大全

    Cpp代码   int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]="程佩君&quo ...

  10. Java 数据类型转换

    学而时习之,温故而知新. 数据类型转换,先放一张图,了解数据类型 简单数据类型之间的转换又可以分为: 1 低级到高级的自动类型转换 2 级到低级的强制类型转换 3 包装类过渡类型转换. (有时候我们有 ...

最新文章

  1. java培训班如何选择
  2. KNN算法的机器学习基础
  3. 拉格朗日、傅里叶、黎曼、柯西、狄利克雷、勒贝格杨、拉贝泰勒,这首诗都包括全了
  4. 为什么事情执行不下去?
  5. (转)全文检索技术学习(二)——配置Lucene的开发环境
  6. es6继承 vs js原生继承(es5)
  7. 正则表达式教程之模式修正符
  8. Eclipse查看源码乱码问题
  9. laydate 周_宝来屋:5天168万!海盐周大生新店如何赢过竞品实现可持续化客流-广告随意贴...
  10. PHP7.0,PHP7.1.x新特性
  11. 微信开发者工具下载地址
  12. django中render()与render_to_response()区别
  13. python 爬取图片、没有后缀名_python爬虫,图片是无格式的
  14. 美军与敏捷领导力—八个改变工作方式世界的老兵
  15. iOS - Safe iOS 加密安全
  16. Android调用系统闹钟AlarmClock
  17. Python之ascii转中文
  18. vue知识点1-父子组件传值 插槽  wath  vuex
  19. stack在python中是什么意思_python栈是什么意思
  20. 肽基脯氨酰异构酶底物:1926163-51-0,WFY-pSer-PR-AMC

热门文章

  1. 红米k40返回键更改位置教程分享
  2. 计算机组装与维修大学专业,计算机组装与维修 全套教案.doc
  3. 制作YOLOv5数据集
  4. 2023基于springboot的健身房管理系统(mysql)-JAVA.VUE(论文+开题报告+运行)
  5. 基于Java的学生请销假审批管理系统的设计与实现毕业设计源码130939
  6. pc版最终幻想测试软件,先来跑个分:《最终幻想15》PC版跑分软件发布
  7. python实现凯撒密码、凯撒加解密算法
  8. ssm获取session中验证码值为null问题
  9. 将ASP.NET项目部署到IIS上后,接上数据库
  10. Linux RedHat7 安装oracle