C#代码: public static string Cut(string sOrig, int iLen)
{
StringBuilder sbTemp = new StringBuilder();
char[] acTemp = sOrig.ToCharArray();
foreach(char cTemp in acTemp)
{
if(iLen<0)
break;
if((int)cTemp>255)
iLen -= 2;
else
iLen --;
sbTemp.Append(cTemp);
}
if(iLen>0)
return sbTemp.ToString();
else
return sbTemp.ToString()+"...";
}
public static int LenB(string sOrig)
{
int iLenB = 0;
char[] acTemp;
acTemp = sOrig.ToCharArray();
foreach(char cTemp in acTemp)
if((int)cTemp>255)
iLenB += 2;
else
iLenB ++;
return iLenB;
}VB.NET代码:
        Public Shared Function Cut(ByVal sOrig As String, ByVal iLen As Integer) As String
            Dim sbTemp As New StringBuilder
            Dim acTemp As Char() = sOrig.ToCharArray()
            Dim cTemp As String
            For Each cTemp In acTemp
                If iLen < 0 Then
                    Exit For
                End If
                If CInt(cTemp) > 255 Then
                    iLen -= 2
                Else
                    iLen -= 1
                End If
                sbTemp.Append(cTemp)
            Next cTemp
            If iLen > 0 Then
                Return sbTemp.ToString()
            Else
                Return sbTemp.ToString() + "..."
            End If
        End Function
        Public Shared Function LenB(ByVal sOrig As String) As Integer
            Dim iLenB As Integer = 0
            Dim acTemp() As Char
            acTemp = sOrig.ToCharArray()
            Dim cTemp As String
            For Each cTemp In acTemp
                If CType(cTemp > 255, Integer) Then
                    'If CInt(cTemp) > 255 Then
                    iLenB += 2
                End If
            Next
            If CType(cTemp <= 255, Integer) Then
                iLenB = iLenB + 1
                Return iLenB
            End If
        End Function上面的VB.NET的代码是我找顶上C#的改的,语法上面没有什么错误了。可是在通过编译之后运行调试出现如下错误。我不会改,哪位高手帮帮我.输入字符串的格式不正确。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.FormatException: 输入字符串的格式不正确。源错误: 
行 378:                    Exit For
行 379:                End If
行 380:                If CInt(cTemp) > 255 Then
行 381:                    iLen -= 2
行 382:                Else
 源文件: D:\TIMES\Classes\Functions.vb    行: 380 堆栈跟踪: 
[FormatException: 输入字符串的格式不正确。]
   Microsoft.VisualBasic.CompilerServices.DoubleType.Parse(String Value, NumberFormatInfo NumberFormat)
   Microsoft.VisualBasic.CompilerServices.DoubleType.Parse(String Value)
   Microsoft.VisualBasic.CompilerServices.IntegerType.FromString(String Value)[InvalidCastException: 从字符串“为”到类型“Integer”的强制转换无效。]
   Microsoft.VisualBasic.CompilerServices.IntegerType.FromString(String Value)
   TIMES.TIMES.Functions.Cut(String sOrig, Int32 iLen) in D:\TIMES\Classes\Functions.vb:380
   TIMES.TIMES.Controls.NewsList.Page_Load(Object sender, EventArgs e) in D:\TIMES\Controls\NewsList.ascx.vb:28
   System.Web.UI.Control.OnLoad(EventArgs e)
   System.Web.UI.Control.LoadRecursive()
   System.Web.UI.Control.LoadRecursive()
   System.Web.UI.Control.LoadRecursive()
   System.Web.UI.Page.ProcessRequestMain(

解决方案 »

  1.   

    Exit For? 还是End For哦;
    中文“为”不能直接转换成Integer型的;
      

  2.   

    下面是修改后的代码.要将cTemp声明为Char,用Convert.ToInt32将Char转换为Unicode对应的值.
    Public Shared Function Cut(ByVal sOrig As String, ByVal iLen As Integer) As String
                Dim sbTemp As New StringBuilder
                Dim acTemp As Char() = sOrig.ToCharArray()
                Dim cTemp As Char
                For Each cTemp In acTemp
                    If iLen < 0 Then
                        Exit For
                    End If
                    If Convert.ToInt32(cTemp) > 255 Then
                        iLen -= 2
                    Else
                        iLen -= 1
                    End If
                    sbTemp.Append(cTemp)
                Next cTemp
                If iLen > 0 Then
                    Return sbTemp.ToString()
                Else
                    Return sbTemp.ToString() + "..."
                End If
            End Function
            Public Shared Function LenB(ByVal sOrig As String) As Integer
                Dim iLenB As Integer = 0
                Dim acTemp() As Char
                Dim tempt As Integer
                acTemp = sOrig.ToCharArray()
                Dim cTemp As Char
                For Each cTemp In acTemp
                    tempt = Convert.ToInt32(cTemp)
                    If tempt > 255 Then
                        iLenB += 2
                    End If
                Next
                If Asc(cTemp) <= 255 Then
                    iLenB = iLenB + 1
                    Return iLenB
                End If
            End Function
        End Class