Erklären Stück C # -Code und die Umwandlung in VB.NET
-
23-09-2019 - |
Frage
Gestern fragte ich diese Frage . Rubens Farias beantwortet sie durch auf diese zeigen Stück Code schrieb er. Der folgende Teil davon kann nicht von MS Visual Studio 2010 Professional Beta 2 erstellt werden.
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);
})));
Es gibt diese Fehler in Visual Studio. Leider Rubens antwortet nicht mehr.
Also ich habe folgende Fragen / Anfragen:
- Ich verstehe nicht, dieses Stück Code, bitte erklären, was genau passiert ist.
- Bitte erläutern Sie, wie dieser Teil für sie „arbeiten“ in VS neu geschrieben, um te werden muss.
- Bitte erklären, wie ich es zu VB.NET konvertieren soll. Ich habe es versucht, Online-Konverter ohne Erfolg verwenden.
Lösung
- KeyValuePair erfordert zwei Typargumente. In Ihrer Delegatendeklaration sagt es einfach
KeyValuePair item
, ohne Typargumente. Ändern Sie diese zudelegate(KeyValuePair<string,string> item)
-
HttpUtility
wird imSystem.Web
Namespace deklariert; hinzufügenusing System.Web;
auf die Verwendung von Aussagen am Anfang der Datei.
Persönlich finde ich es einfacher und sauberer Gebrauch Lambda-Stil für diese Art von Code:
byte[] buffer =
Encoding.UTF8.GetBytes(
String.Join("&",
Array.ConvertAll<KeyValuePair<string, string>, string>(
inputs.ToArray(), (item) => item.Key + "=" + HttpUtility.UrlEncode(item.Value))));
Wenn Sie den C # -Code Arbeit bekommen haben, die DeveloperFusion C # VB.NET Konverter macht den Job:
' 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))))
Andere Tipps
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);
})));
Versuchen Sie das mal.
-
Der Code erscheint eine GET-Anfrage Liste der Elemente zu bauen z.B.
key1=value1&key2=value2
. Dies wird durch zunächst Umwandeln desinputs
Array in einzelne Elementekey=value
dann getan, um sie zusammen mit einem AmpersandString.Join
ing. Es gibt dann die UTF8 in einem Array Bytes. -
Das funktioniert (siehe Code).
-
Ich bin keine VB.NET Programmierer, sorry, aber ich werde in einem zweiten mal ran.
Es ist Umwandeln der Eingänge Liste mit Schlüssel / Wert-Paare in eine Zeichenfolge, die aussieht wie ein Query-String (zB. Item1 = value1 & item2 = Wert2), dann die Umwandlung dieser in den Puffer Byte-Array mit UTF8-Codierung.
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