没有'As'子句的变量声明

时间:2017-04-20 03:02:59

标签: vb.net

我的代码如下:

Private Shared Function Dec2Base(ByVal DecNum, ByVal Base) As String
    Dim NHD As Double
    Dim HN As String = ""

    While DecNum <> 0
        NHD = DecNum - (Int(DecNum / Base) * Base)
        HN = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", NHD + 1, 1) & HN
        DecNum = Int(DecNum / Base)
    End While

    Dec2Base = HN
End Function

导致此编译错误:

Variable declaration without an 'As' clause; type of Object assumed.

所以我查看了代码并得出结论:DecNumBase其中Integers并将As Integer添加到函数声明中。

然后我偶然发现了这个电话:

Public Shared Function SetP() As String
    Dim b = Format(Now(), "MMddyy")

    SetP = Dec2Base(b, 17)

End Function

有几个喜欢它。即:DecNum以字符串形式传入。

消除编译警告消息的正确方法是什么?

  1. ByVal DecNum As String
  2. ByVal DecNum As Integer
  3. 别的什么?
  4. 现在代码中何时发生类型转换,以及如何通过添加As子句来更改?

2 个答案:

答案 0 :(得分:2)

我想说DecNum和Base最有可能是整数。

我注意到的一些事情:

不使用字符串文字,最好使用Const变量。这使您可以选择使用字符串索引而不是Mid函数。索引将只是数字的模数除以基数。

vb.net的一个捷径是一个特殊的整数分区符号(\)。如果您希望除法的结果为整数,则可以使用此符号并自动完成转换。

考虑到这些,您的代码可能如下所示:

Private Function Dec2Base2(ByVal DecNum As Integer, ByVal Base As Integer) As String
    Const DIGITS As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Dim s As String = ""
    Dim num = DecNum
    While num > 0
        s = DIGITS(num Mod Base) & s
        num = num \ Base
    End While
    Return s
End Function

答案 1 :(得分:1)

要消除警告,您可以使用ByVal DecNum as Object,但行为可能未定义,因为它会根据传入的内容将其隐式转换为字符串或整数。我可能会使用Integer类型并重新写任何调用以将其作为类型传递。