运算符<未定义类型'char'和'integer'

时间:2013-10-17 09:35:01

标签: c# asp.net vb.net char hex

我正在尝试将一个代码块从C#转换为VB.NET。原始代码示例可以位于此处(请参阅接受的答案):

How do you remove invalid hexadecimal characters from an XML-based data source prior to constructing an XmlReader or XPathDocument that uses the data?

我使用an online tool进行了原始转换,尽管我在根据十六进制字符范围检查ch char对象时有异常。

If (ch < &HFD AndAlso ch > &H1F)

引发的异常是operator < is not defined for types 'char' and 'integer'。 VB解释我哪里错了?

Function RemoveTroublesomeCharacters(inString As String) As String
    If inString Is Nothing Then
        Return Nothing
    End If

    Dim newString As New StringBuilder()
    Dim ch As Char

    For i As Integer = 0 To inString.Length - 1

        ch = inString(i)
        ' remove any characters outside the valid UTF-8 range as well as all control characters
        ' except tabs and new lines
        If (ch < &HFD AndAlso ch > &H1F) OrElse ch = ControlChars.Tab OrElse ch = ControlChars.Lf OrElse ch = ControlChars.Cr Then
            newString.Append(ch)
        End If
    Next
    Return newString.ToString()

End Function

3 个答案:

答案 0 :(得分:5)

在C#中,char可以转换为int16,因此不等式测试是有意义的。

在VB.Net中,不允许隐式转换,因此您必须自己动手。

实现这一目标的最简单方法通常是Asc()方法(将char转换为int)或Chr()方法(转向其他方式)。

例如:

If (Asc(ch) < &HFD AndAlso Asc(ch) > &H1F) OrElse...

我最近曾多次将此问题作为developerfusion转换的问题,因此我提出了建议的更改here。如果您想要修复它,请给它投票!

答案 1 :(得分:2)

您可以使用Chr()Asc()

Asc() - &gt;返回表示与字符对应的字符代码的Integer值。

Chr() - &gt;返回与指定字符代码关联的字符。

       If (Asc(ch) < &HFD AndAlso Asc(ch) > &H1F) OrElse ch = ControlChars.Tab OrElse ch = ControlChars.Lf OrElse ch = ControlChars.Cr Then
            newString.Append(ch)
        End If


       If (ch < Chr(&HFD) AndAlso ch > Chr(&H1F)) OrElse ch = ControlChars.Tab OrElse ch = ControlChars.Lf OrElse ch = ControlChars.Cr Then
            newString.Append(ch)
        End If

答案 2 :(得分:1)

您需要使用Asc来获取角色的代码:

Asc(ch) < &HFD AndAlso Asc(ch) > &H1F