首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将DataTypes转换为选项严格

将DataTypes转换为选项严格
EN

Stack Overflow用户
提问于 2014-02-14 13:25:37
回答 1查看 3.6K关注 0票数 1

我只是想知道如何正确地

  1. 转换字符串到日期
  2. 将整数转换为短整数
  3. 将字符串转换为整数
  4. 将字符串转换为双字符串

正确而不使用任何类型的C类型。我启用了严格的选项,现在出现了所有这些错误,因此我试图修复它们:)

EN

回答 1

Stack Overflow用户

发布于 2014-02-14 14:54:33

NET提供了几种检查、测试和转换数据的方法。

TryParse

这也许是最防弹的转换方式。它是验证用户输入的理想方法:

代码语言:javascript
复制
Dim n As Int32
If Int32.TryParse(TextBox.Text, n) Then
    ' work with n
Else
    ' error handling: TextBox.Text cannot convert to int
End If

所有核心数据类型都支持它(Int64DecimalDate等)。它与其他值不同:它不返回转换后的值,而是一个指示源字符串是否可以转换为变量的Boolean

Parse

代码语言:javascript
复制
Dim d as Double = Double.Parse(strVar) 

当您的代码创建strVar并且知道它包含数字而不是标点符号等时,这是可以使用的。ParseTryParse都允许您通过提供FormatProvider和其他选项来解析来自其他区域性的数据:

代码语言:javascript
复制
Dim strDec = "$ 123.45"
Dim decVal As Decimal = Decimal.Parse("$123.45", NumberStyles.Currency)

其他方法会被"$“阻塞,样式参数允许它。

Convert.ToInt32 / Convert.ToInteger

这个有很多,很多过载:

代码语言:javascript
复制
Dim intV As Int32 = Convert.ToInt32(aString)
Dim dblV As Double = Convert.ToDouble(aString)
Dim lngV As Int64 = Convert.ToInt64(aString)

与上面的方法相比,Convert.Toxxx方法稍微不那么专门化。它们允许区域性转换,但它们假设直接转换是可能的。也就是说,"123“将转换为整数,而不是"123.45”,而且它不会知道任何类似货币格式的东西。

因此,当您知道值可以转换时,请使用此方法,这可能是因为您将值转换为字符串。这些方法还可以打开数据库DataReader中的对象。

代码语言:javascript
复制
myDT = Convert.ToDateTime(rdr("BirthDate"))
myV = Convert.ToInt32(rdr("FooValue"))

如果数据实际存储为这些类型,并将“装箱”作为DBDataReader的对象,则Convert将正常工作。(请注意,DBDataReaders可以直接返回类型化数据:n = rdr.GetInt32(1),但不能使用列名,只使用序号)。

CInt,CSng...etc

CInt类似于Convert.ToInteger,但根据对VB中使用的MSDN进行优化。例如:

代码语言:javascript
复制
a = Convert.ToInt32("123.50")     ' exception due to decimal point
a = CInt("123.50")                ' a = 124

令人困惑?是的,但是一旦你掌握了它们,你就可以使用最适合这种情况的方法。没有办法为CIntCDec等指定区域性。

Val

不要使用Val。永远不会。它是一个非常通用的函数,它返回一个Double。使用它会导致各种不受欢迎的类型转换:

代码语言:javascript
复制
Dim n = Val(tbSmallValue.Text)

n是作为一个双重创建的,所以如果textbox是"5",那么n = 5.0。当使用需要整数(例如插入数据库)的n时,可能会发生错误。结果差别很大:

代码语言:javascript
复制
dd = Val("123.4")          ' = 123.4
dd = Val("$123.45")        ' = 0.0
dd = Val("123abc")         ' = 123.0

NB CIntConvert.ToInt32实现了“银行家的四舍五入”,其中.50分数四舍五入到最接近的偶数。123.50124.50都是循环/转换为124

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21780619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档