VB中兼容PCL的Chr和Asc?

时间:2014-10-17 15:45:25

标签: vb.net portable-class-library

我正在将旧的VB代码库移植到PCL兼容格式。我已经设法建立了像Left和CInt这样的新版本,但是Asc和Chr让我感到难过。典型的答案是“导入Microsoft.VisualBasic”,但这在PCL中不存在。

在C#中,您只需将字符串转换为int即可获取Unicode值。相当于VB.net中的DirectCast,但这不起作用。有谁知道如何使用PCL兼容函数在VB.net中编写Asc和Chr?

3 个答案:

答案 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代替ChrConvert.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为目标。