vb将函数转换为c#

时间:2015-10-10 11:48:47

标签: c# vb.net substring

尝试将此代码段转换为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));
    }

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

断点第一次命中时,索引是正确的(12)而itm.Length说31并且它似乎有31个字符,但是因为itm.length是系统代码,所以不确定如何产生错误。< / p>

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

VB

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

对应于C#

itm.Trim().Substring(pos)