После преобразования из C# в vb. net выдает ошибку - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь преобразовать код C# в Visual Basi c.

Это код C#:

public static string RequestServer1(string methodName, List<string> parameters)
{
    return RequestServer(methodName, parameters.Select(p => new JValue(p)).ToList<JToken>());
}

А это VB. Net код:

Public Shared Function RequestServer(ByVal methodName As String, ByVal parameters As List(Of String)) As String
    Return RequestServer(methodName, parameters.Select(Function(p) New JValue(p)).ToList())
End Function

А здесь функция с List(Of JToken):

Public Shared Function RequestServer(ByVal methodName As String, ByVal parameters As List(Of JToken)) As JToken
    Dim ServerIp As String = "http://localhost:8332"
    Dim UserName As String = "hama"
    Dim Password As String = "hama"
    Dim webRequest As HttpWebRequest = CType(webRequest.Create(ServerIp), HttpWebRequest)
    webRequest.Credentials = New NetworkCredential(UserName, Password)

    webRequest.ContentType = "application/json-rpc"
    webRequest.Method = "POST"

    Dim respVal As String = String.Empty
    Dim joe As JObject = New JObject
    joe.Add(New JProperty("jsonrpc", 1))
    joe.Add(New JProperty("id", 1))
    joe.Add(New JProperty("method", methodName))
    Dim props As JArray = New JArray
    For Each parameter In parameters
        props.Add(parameter)
    Next
    joe.Add(New JProperty("params", props))
    ' serialize json for the request
    Dim s As String = JsonConvert.SerializeObject(joe)
    Dim byteArray() As Byte = Encoding.UTF8.GetBytes(s)
    webRequest.ContentLength = byteArray.Length
    Dim dataStream As Stream = webRequest.GetRequestStream
    dataStream.Write(byteArray, 0, byteArray.Length)
    dataStream.Close()
    Dim streamReader As StreamReader = Nothing
    Try
        Dim webResponse As WebResponse = webRequest.GetResponse
        streamReader = New StreamReader(webResponse.GetResponseStream, True)
        respVal = streamReader.ReadToEnd
        Dim data = JsonConvert.DeserializeObject(respVal).ToString
        Return data
    Catch exp As Exception

    Finally
        If (Not (streamReader) Is Nothing) Then
            streamReader.Close()
        End If
    End Try

    Return String.Empty
End Function

Иногда мне нужен список JToken, а иногда мне нужен список строк, поэтому мои оба метода могут работать.

Перед компиляцией он показывает ошибку, он не принимает Return RequestServer(methodName, parameters.Select(Function(p) New JValue(p)).ToList())

Он говорит:

Невозможно преобразовать список (Of JValue) в список (Of String)

Что я здесь делаю не так?

1 Ответ

5 голосов
/ 09 июля 2020

Код C# преобразовывал List(Of JValue) в List(of JToken), но это преобразование было потеряно при преобразовании C# в VB.

Если JValue наследует JToken, вы можете использовать Enumerable.Cast для преобразования вашего перечислимого типа из одного типа в другой (перед вызовом .ToList ()):

Public Shared Function RequestServer(ByVal methodName As String, ByVal parameters As List(Of String)) As String
    Return RequestServer(methodName, parameters.Select(Function(p) New JValue(p)).Cast(Of JToken).ToList())
End Function
...