我正在将旧的VB代码库移植到PCL兼容格式。我已经设法建立了像Left和CInt这样的新版本,但是Asc和Chr让我感到难过。典型的答案是“导入Microsoft.VisualBasic”,但这在PCL中不存在。
在C#中,您只需将字符串转换为int即可获取Unicode值。相当于VB.net中的DirectCast,但这不起作用。有谁知道如何使用PCL兼容函数在VB.net中编写Asc和Chr?
答案 0 :(得分:1)
密钥是System.Text.ASCIIEncoding.UTF.GetString / GetBytes。这些都适用于数组,所以你必须在进入GetString之前将输入(在我的情况下为Int32)复制到Byte()中,并在进入GetBytes之前将子串(0,1)复制到Char()中。当然,这比C#解决方案更复杂,您可以在其中转换char / int。反正...
Public Function Asc(CharIn As String) As Integer
Dim c As Char = Convert.ToChar(CharIn.Substring(0, 1))
Dim cArray(0) As Char
cArray(0) = c
Return Convert.ToInt32(System.Text.ASCIIEncoding.UTF8.GetBytes(cArray)(0))
End Function
Public Function Chr(NumIn As Integer) As String
Dim bArray(0) As Byte
Dim AscString As String
bArray(0) = Convert.ToByte(NumIn)
AscString = System.Text.ASCIIEncoding.UTF8.GetString(bArray)
Return AscString
End Function
答案 1 :(得分:0)
我在Chr中使用了以下内容:
Public Shared Function Chr(NumIn As Integer) As String
Dim bArray(0) As Byte
Dim AscString As String
bArray(0) = Convert.ToByte(NumIn)
AscString = System.Text.Encoding.UTF8.GetString(bArray, 0, 1)
Return AscString
End Function
答案 2 :(得分:0)
您可以使用Convert.ToChar
代替Chr
和Convert.ToInt32
代替Asc
:
Dim c As Char = Convert.ToChar(65) ' yields the character "A"
Dim i As Int32 = Convert.ToInt32("A"c) ' yields 65
两者都可以在PCL中使用,即使是以Xamarin为目标。