将 VB 转换为 C# - 类型转换

本文关键字:类型转换 VB 转换 | 更新日期: 2023-09-27 17:55:53

我需要帮助将一些代码从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 和 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 转换为 C# - 类型转换

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

现在试试:

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

是你想要的。Math.DivRem() 返回上述整数除法应处理的商。 第三个 out 参数返回其余部分,但由于您在 vb. net 代码中不关心它,因此您可以忽略它。