Spiegare pezzo di codice C # e la conversione a VB.NET
-
23-09-2019 - |
Domanda
Ieri ho chiesto a questo domanda . Rubens Farias rispose indicando questo pezzo di codice ha scritto. La seguente parte di esso non può essere compilato da MS Visual Studio 2010 Professional Beta 2.
byte[] buffer =
Encoding.UTF8.GetBytes(
String.Join("&",
Array.ConvertAll<KeyValuePair<string, string>, string>(
inputs.ToArray(),
delegate(KeyValuePair item)
{
return item.Key + "=" + HttpUtility.UrlEncode(item.Value);
})));
questi errori in Visual Studio. Purtroppo Rubens non risponde più.
Così ho le seguenti domande / richieste:
- Non capisco questo pezzo di codice, si prega di spiegare che cosa sta accadendo esattamente.
- Si prega di spiegare come questa parte è te essere riscritto in modo che esso per "lavoro" in VS.
- Si prega di spiegare come dovrei convertirlo in VB.NET. Ho provato utilizzando convertitori on-line senza alcun risultato.
Soluzione
- KeyValuePair richiede due argomenti di tipo. Nella vostra dichiarazione delegato si dice semplicemente
KeyValuePair item
, senza argomenti tipo. Cambiare questo perdelegate(KeyValuePair<string,string> item)
-
HttpUtility
è dichiarata nel namespaceSystem.Web
; aggiungiusing System.Web;
alle dichiarazioni utilizzando nella all'inizio del file.
Personalmente trovo più facile e più pulito di utilizzare lo stile lambda per questo tipo di codice:
byte[] buffer =
Encoding.UTF8.GetBytes(
String.Join("&",
Array.ConvertAll<KeyValuePair<string, string>, string>(
inputs.ToArray(), (item) => item.Key + "=" + HttpUtility.UrlEncode(item.Value))));
Dopo aver ottenuto il codice # C a lavorare, il DeveloperFusion C # per convertitore VB.NET fa il lavoro:
' Converted from delegate style C# implementation '
Dim buffer As Byte() = Encoding.UTF8.GetBytes( _
[String].Join("&", _
Array.ConvertAll(Of KeyValuePair(Of String, String), String)(inputs.ToArray(), _
Function(item As KeyValuePair(Of String, String)) (item.Key & "=") + HttpUtility.UrlEncode(item.Value))))
' Converted from Lambda style C# implementation '
Dim buffer As Byte() = Encoding.UTF8.GetBytes( _
[String].Join("&", _
Array.ConvertAll(Of KeyValuePair(Of String, String), String)(inputs.ToArray(), _
Function(item) (item.Key & "=") + HttpUtility.UrlEncode(item.Value))))
Altri suggerimenti
byte[] buffer =
Encoding.UTF8.GetBytes(
String.Join("&",
Array.ConvertAll<KeyValuePair<string, string>, string>(
inputs.ToArray(),
delegate(KeyValuePair<string, string> item)
{
return item.Key + "=" + System.Web.HttpUtility.UrlEncode(item.Value);
})));
Prova questo.
-
Il codice sembra essere la costruzione di una lista GET richiesta di articoli per esempio
key1=value1&key2=value2
. Questo è fatto convertendo prima matriceinputs
in singoli elementi dikey=value
poiString.Join
ing insieme con una e commerciale. Quindi restituisce i byte UTF8 in un array. -
Questo funziona (vedi codice).
-
Io non sono un programmatore VB.NET, mi dispiace, ma avrò un andare in un secondo.
Si conversione dell'elenco ingressi contenente coppie chiave / valore in una stringa che assomiglia molto una stringa di query (es. Item1 = valore1 & item2 = valore2), quindi la conversione che nell'array di byte del buffer utilizzando la codifica UTF8.
Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim inputs As New List(Of KeyValuePair(Of String, String))
inputs.Add(New KeyValuePair(Of String, String)("a", "adata"))
Dim buffer As Byte() = _
Encoding.UTF8.GetBytes( _
String.Join("&", _
Array.ConvertAll(Of KeyValuePair(Of String, String), String)( _
inputs.ToArray(), _
Function(item As KeyValuePair(Of String, String)) _
item.Key & "=" & HttpUtility.UrlEncode(item.Value) _
)))
End Sub
End Class