【发布时间】:2015-10-10 11:48:46
【问题描述】:
在尝试将此代码 sn-p 转换为 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 是系统代码,因此不确定如何产生错误。
【问题讨论】:
-
原VB版本有问题(可能会触发错误)。
Right方法将itm(Trim(itm)) 的修剪版本作为参数,但考虑了未修剪的长度 (itm.Length)。它还应该考虑修剪后的长度 (Trim(itm).Length)。 -
您是否忘记在您的 vb ".net" 代码中使用
Eval和Len? ;)