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