[英]Converting VB6 code snippet to VB.NET
I am having a hard time converting this snippet to VB.NET 我很难将这个代码段转换为VB.NET
Function DecryptPassword(ByVal s As String) As String
Dim i As Integer
Dim sPass As String = s.Trim()
For i = 1 To Len(sPass)
If Asc(Mid$(sPass, i, 1)) - 5 < 124 Then
'this line throws "type char $ does not match declared data type char"
Mid$(sPass, i, 1) = Chr$(Asc(Mid$(sPass, i, 1)) - 5)
Else
Mid$(sPass, i, 1) = Mid$(sPass, i, 1)
End If
Next
DecryptPassword = UCase(sPass) ' Convert UserPassword to UpperCase
End Function
It works well in VB6 but throws error when i VB.Net.. 它在VB6中运行良好但在VB.Net时抛出错误..
Try this version: 试试这个版本:
Function DecryptPassword(ByVal s As String) As String
If String.IsNullOrEmpty(s) Then
Return String.Empty
End If
Dim sbPass As New System.Text.StringBuilder(s.Length)
For Each oCharacter As Char In s.Trim
If Asc(oCharacter) - 5 < 124 Then
sbPass.Append(Convert.ToChar(Asc(oCharacter) - 5))
Else
sbPass.Append(oCharacter)
End If
Next
Return sbPass.ToString.ToUpper
End Function
This seems to work (just removed the "$" like Booji Boy wrote). 这似乎工作(刚刚删除像Booji Boy写的“$”)。
Function DecryptPassword(ByVal s As String) As String
Dim i As Integer
Dim sPass As String = s.Trim()
For i = 1 To Len(sPass)
If Asc(Mid(sPass, i, 1)) - 5 < 124 Then
Mid(sPass, i, 1) = Chr(Asc(Mid(sPass, i, 1)) - 5)
Else
Mid(sPass, i, 1) = Mid(sPass, i, 1)
End If
Next
DecryptPassword = UCase(sPass) ' Convert UserPassword to UpperCase
End Function
Just for the sake of it, a linq approach. 只是为了它,一个linq方法。
Function DecryptPassword(ByVal s As String) As String
Return s.Aggregate(Of String)(String.Empty, Function(acc, c) acc & Char.ToUpper(If(Asc(c) - 5 < 124, Convert.ToChar(Asc(c) - 5), c)))
End Function
Or 要么
Function DecryptPassword(ByVal s As String) As String
Return New String((From c In s Select Char.ToUpper(If(Asc(c) - 5 < 124, Convert.ToChar(Asc(c) - 5), c))).ToArray)
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.