1

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

在构造使用数据的 XmlReader 或 XPathDocument 之前,如何从基于 XML 的数据源中删除无效的十六进制字符?

我已经使用在线工具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
4

3 回答 3

5

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

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

实现这一点的最简单方法通常是Asc()方法(将 char 转换为 int)或Chr()方法(另辟蹊径)。

例如:

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

我最近几次遇到这个作为 developerfusion 转换的问题,所以我在这里提出了一个建议的更改。如果您想修复它,请给它投票!

于 2013-10-17T09:39:10.263 回答
2

您可以使用Chr()Asc()

Asc() --> 返回一个整数值,表示一个字符对应的字符代码。

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

       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
于 2013-10-17T09:38:23.633 回答
1

您需要使用Asc来获取字符的代码:

Asc(ch) < &HFD AndAlso Asc(ch) > &H1F
于 2013-10-17T09:39:03.237 回答