我正在开发一个旧的VB项目,并且我将它重写为C#。
我有几行不符合我对功能的了解。我已经阅读过MSDN,据我所知,一个函数必须有(seq (->bytes (Long/MAX_VALUE))) => (-1 -1 -1 -1)
或Return
,如果没有(没有意义,有程序)你可以发送数据Exit
。
这个功能没有其中任何一个,但它仍然应该做某事 - 如果不是,我不认为该程序会起作用,但确实如此。
它看起来像是在呼唤自己但是过载;但我不知道,这对我来说太奇怪了。
功能本身:
ByRef
变量因子在代码的其他地方定义,它是:
Private Function f(ByVal numero As Double) As String
Dim intermedio As Double
intermedio = numero * Factor
If intermedio - Int(intermedio) = 0 Then
f = Format(intermedio, "0")
Else
f = Format(intermedio, "###0.0######")
End If
'f = Format(intermedio, "0.00000E+000")
f = Replace(f, ",", ".")
'f = Str(numero)
End Function
对该功能的调用:
double Factor = 1;
答案 0 :(得分:8)
在Visual Basic中,函数本身的名称将成为可在函数中使用的变量。在函数结束时,除非使用显式Return
语句,否则将其中剩余的内容用作返回值。
在您的情况下,f
始终使用。
引用MSDN:
退出功能和返回语句会立即退出功能过程。任何数量的退出功能和返回语句都可以出现在程序的任何位置,您可以混合使用退出功能和返回陈述。
如果您使用退出功能而未为 name 指定值,则该过程将返回 returntype 中指定的数据类型的默认值。如果未指定 returntype ,则该过程返回 Nothing ,这是对象的默认值。
答案 1 :(得分:2)
f = Replace(f, ",", ".")
您的函数名称为f
,此局部变量是您返回的值(因为名称相同)。是自动的。
答案 2 :(得分:1)
在C#中
private string f(double numero)
{
string functionReturnValue = null;
double intermedio = 0;
intermedio = numero * Factor;
if (intermedio - Conversion.Int(intermedio) == 0) {
functionReturnValue = Strings.Format(intermedio, "0");
} else {
functionReturnValue = Strings.Format(intermedio, "###0.0######");
}
//f = Format(intermedio, "0.00000E+000")
functionReturnValue = Strings.Replace(f(), ",", ".");
//f = Str(numero)
return functionReturnValue;
}
正如Steve和许多其他人在VB中提到的那样,如果函数和变量的名称相同,则返回变量...在C#中,在函数中添加一个functionReturnValue代替f并返回它。