我只是想知道如何正确地
正确而不使用任何类型的C类型。我启用了严格的选项,现在出现了所有这些错误,因此我试图修复它们:)
发布于 2014-02-14 14:54:33
NET提供了几种检查、测试和转换数据的方法。
TryParse
这也许是最防弹的转换方式。它是验证用户输入的理想方法:
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所有核心数据类型都支持它(Int64、Decimal、Date等)。它与其他值不同:它不返回转换后的值,而是一个指示源字符串是否可以转换为变量的Boolean。
Parse
Dim d as Double = Double.Parse(strVar) 当您的代码创建strVar并且知道它包含数字而不是标点符号等时,这是可以使用的。Parse和TryParse都允许您通过提供FormatProvider和其他选项来解析来自其他区域性的数据:
Dim strDec = "$ 123.45"
Dim decVal As Decimal = Decimal.Parse("$123.45", NumberStyles.Currency)其他方法会被"$“阻塞,样式参数允许它。
Convert.ToInt32 / Convert.ToInteger
这个有很多,很多过载:
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中的对象。
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进行优化。例如:
a = Convert.ToInt32("123.50") ' exception due to decimal point
a = CInt("123.50") ' a = 124令人困惑?是的,但是一旦你掌握了它们,你就可以使用最适合这种情况的方法。没有办法为CInt、CDec等指定区域性。
Val
不要使用Val。永远不会。它是一个非常通用的函数,它返回一个Double。使用它会导致各种不受欢迎的类型转换:
Dim n = Val(tbSmallValue.Text)n是作为一个双重创建的,所以如果textbox是"5",那么n = 5.0。当使用需要整数(例如插入数据库)的n时,可能会发生错误。结果差别很大:
dd = Val("123.4") ' = 123.4
dd = Val("$123.45") ' = 0.0
dd = Val("123abc") ' = 123.0NB CInt和Convert.ToInt32实现了“银行家的四舍五入”,其中.50分数四舍五入到最接近的偶数。123.50和124.50都是循环/转换为124。
https://stackoverflow.com/questions/21780619
复制相似问题