簡體   English   中英

從 C# 轉換為 vb.net 后顯示錯誤

[英]After converting from C# to vb.net it shows an error

我正在嘗試將 C# 代碼轉換為 Visual Basic。

這是 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())

它說:

無法將列表(JValue)轉換為列表(字符串)

我在這里做錯了什么?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM