【问题标题】:Operator < is not defined for types 'char' and 'integer'运算符 < 没有为类型 'char' 和 'integer' 定义
【发布时间】:2013-10-25 17:25:42
【问题描述】:

我正在尝试将一段代码从 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 &lt; &amp;HFD AndAlso ch &gt; &amp;H1F)

引发的异常是operator &lt; 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

【问题讨论】:

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


    【解决方案1】:

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

    在VB.Net中不允许隐式转换,所以你必须自己行动。

    实现这一点的最简单方法通常是Asc() 方法(将char 转换为int)或Chr() 方法(反之亦然)。

    例如:

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

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多