将VB转换为C#类型转换
我需要帮助,将一些代码从VB转换为C#。将VB转换为C#类型转换
Public Function ToBase36(ByVal IBase36 As Double) As String
Dim Base36() As String = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
Dim v As String
Dim i As Decimal
Do Until IBase36 < 1
i = IBase36 Mod 36
v = Base36(i) & v
IBase36 = Math.DivRem(Long.Parse(IBase36), 36, Nothing)
Loop
Return v
End Function
我的问题是类型转换在VB中是如何工作的,这行让我最麻烦的,因为IBase36是双,Math.DivRem()在这种情况下应该返回长和Long.Parse()需要字符串。
IBase36 = Math.DivRem(Long.Parse(IBase36), 36, Nothing)
这里是我的翻译,工作代码感谢JaredPar和其他
public static string ToBase36(double IBase36)
{
string[] Base36 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
string v = null;
long i = default(long);
while (!(IBase36 < 1))
{
IBase36 = Convert.ToDouble(Math.DivRem(Convert.ToInt64(IBase36), 36, out i));
v = Base36[i] + v;
}
return v;
}
要翻译首先要明白是怎么VB.Net代码的功能是非常重要的。引擎盖下,将基本生成以下
Dim unused As Long
IBase36 = CDbl(Math.DivRem(Long.Parse(CStr(IBase36)), 36, unused)
注:未使用的变量是必要的,因为第三个参数是一个out
。转换为C#时,这是一个重要区别。
最自然的C#等效的上面是
long unused;
IBase36 = Convert.ToDouble(Math.DivRem(Long.Parse(IBase36.ToString()), 36, out unused);
谢谢,现在它不会给我一个错误。 – 2011-05-09 15:25:40
IBase36 = (long)IBase36/36;
是你想要的。 Math.DivRem()还有以上整数部分应该照顾的商。第三个输出参数返回余数,但因为你不关心它在VB中。网络代码,你可以忽略它。
立即尝试:
long unused = null;
IBase36 = Convert.ToDouble(Math.DivRem(Convert.ToInt64(IBase36), 36, out unused));
的第三个参数'Math.DivRem'是'out'所以'null'将不起作用 – JaredPar 2011-05-09 15:21:05
感谢您指出它。我更新了答案。 – 2011-05-09 15:33:00
代码是从http://www.codeproject.com/KB/security/cdkeys.aspx – 2011-05-09 15:03:28