将VB转换为C#类型转换

将VB转换为C#类型转换,c#,vb.net,implicit-conversion,C#,Vb.net,Implicit Conversion,我需要帮助将一些代码从VB翻译成C 这是我的翻译代码,感谢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",

我需要帮助将一些代码从VB翻译成C

这是我的翻译代码,感谢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;
    }
公共静态字符串ToBase36(双IBase36)
{
字符串[]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”};
字符串v=null;
长i=默认值(长);
而(!(IBase36<1))
{
IBase36=Convert.ToDouble(Math.DivRem(Convert.ToInt64(IBase36),36,out i));
v=Base36[i]+v;
}
返回v;
}
这就是你想要的。返回上述整数除法应处理的商。第三个out参数返回余数,但在vb中不关心它。net代码,您可以忽略它。

现在试试:

long unused = null;
IBase36 = Convert.ToDouble(Math.DivRem(Convert.ToInt64(IBase36), 36, out unused));

要进行翻译,首先了解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);

代码是从第三个参数到
Math.DivRem
out
所以
null
不起作用
long unused = null;
IBase36 = Convert.ToDouble(Math.DivRem(Convert.ToInt64(IBase36), 36, out unused));
Dim unused As Long
IBase36 = CDbl(Math.DivRem(Long.Parse(CStr(IBase36)), 36, unused)
long unused;
IBase36 = Convert.ToDouble(Math.DivRem(Long.Parse(IBase36.ToString()), 36, out unused);