从 C# 转换为 vb.net 后显示错误

Ham*_*ita 0 c# vb.net code-conversion json-rpc

我正在尝试将 C# 代码转换为 Visual Basic。

这是 C# 代码:

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

这是 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
Run Code Online (Sandbox Code Playgroud)

这里的功能是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
Run Code Online (Sandbox Code Playgroud)

有时我需要一个列表JToken,有时我需要一个字符串列表,所以我的两种方法都可以工作。

在编译之前它显示一个错误,它不接受 Return RequestServer(methodName, parameters.Select(Function(p) New JValue(p)).ToList())

它说:

不可能将列表(JValue)转换为列表(字符串)

我在这里做错了什么?

Sea*_*lly 5

C# 代码正在将 a 转换List(Of JValue)为 a 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
Run Code Online (Sandbox Code Playgroud)