[英]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.