我的代码如下:
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.
所以我查看了代码并得出结论:DecNum
和Base
其中Integers并将As Integer
添加到函数声明中。
然后我偶然发现了这个电话:
Public Shared Function SetP() As String
Dim b = Format(Now(), "MMddyy")
SetP = Dec2Base(b, 17)
End Function
有几个喜欢它。即:DecNum
以字符串形式传入。
消除编译警告消息的正确方法是什么?
ByVal DecNum As String
?ByVal DecNum As Integer
?现在代码中何时发生类型转换,以及如何通过添加As
子句来更改?
答案 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类型并重新写任何调用以将其作为类型传递。