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

本文关键字:integer char 类型 运算符 未定义 | 更新日期: 2023-09-27 18:35:40

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

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

我已经使用在线工具进行了粗略的转换,尽管在根据十六进制字符范围检查 char 对象ch我有一个例外。

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

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

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

VB.Net 这种隐式转换是不允许的,因此你必须自己行动。

实现此目的的最简单方法通常是Asc()方法(将字符转换为 int)或Chr()方法(反其道而行之)。

例如:

If (Asc(ch) < &HFD AndAlso Asc(ch) > &H1F) OrElse...
我最近几次遇到这个问题

作为开发人员融合转换的问题,所以我在这里提出了一个建议的更改。如果你想修复它,请投票!

您可以使用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

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

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