vb 正确的函数转换为 c#

vb right function conversions to c#

尝试将此代码片段转换为 C# 时遇到一些问题

   Private Shared Function GetOccInt(ByVal itm As String) As Integer
      Dim pos As Integer = InStr(itm, ">")
      Dim strTemp As String = Trim(Replace(Right(Trim(itm), itm.Length - pos), "</b>)</a>", String.Empty))
      pos = InStr(strTemp, ">")
      Return Convert.ToInt32(Trim(Right(strTemp, strTemp.Length - pos)))
   End Function

我最后的尝试应该是正确的,但显然不是:

  private static int GetOccInt(string itm)
    {
        var pos = itm.IndexOf(">", StringComparison.Ordinal);
        var strTemp = itm.Trim().Substring(itm.Length - pos, itm.Length).Replace("</b>)</a>", "");
        pos = strTemp.IndexOf(">", StringComparison.Ordinal);
        return Convert.ToInt32(strTemp.Trim().Substring(strTemp.Length - pos, strTemp.Length));
    }

调试时,我收到子字符串函数的参数超出范围错误,消息 = 索引和长度必须引用字符串中的某个位置。 参数名称:长度

第一次遇到断点时,索引是正确的 (12) 而 itm.Length 表示 31 并且它似乎有 31 个字符,但由于 itm.length 是系统代码,因此不确定如何可能会产生错误。

为什么要重新发明轮子?您可以添加对 Microsoft.VisualBasic 库的引用并仅使用 Strings.Right.

如果您不想添加该引用,Right(str, i) 的规范替代是 str.Substring(str.Length - i)(只有一个参数,您在示例中使用了两个)。

但请注意,Right 支持超过字符串长度的目标长度,而替换则不支持:Right("abc", 5) 将在 VB 中产生 abc , 但使用 "abc".Substring(3 - 5) 会产生异常。

VB

Right(Trim(itm), itm.Length - pos)

对应C#

itm.Trim().Substring(pos)