2013-10-17 82 views
1

我試圖將一段代碼從C#轉換爲VB.NET。原來的代碼示例可以在這裏位於(見接受的答案):運算符<未爲'char'和'integer'類型定義

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 

回答

5

在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 
1

您需要使用Asc得到字符的代碼:

Asc(ch) < &HFD AndAlso Asc(ch) > &H1F 
相關問題