Expliquer morceau de code C # et VB.NET conversion
-
23-09-2019 - |
Question
Hier j'ai posé cette question . Rubens Farias répondu en pointant cette morceau de code écrit-il. La partie suivante de celui-ci ne peut pas être compilé par MS Visual Studio 2010 Beta 2 Professional.
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);
})));
Il donne ces erreurs dans Visual Studio. Malheureusement, Rubens ne répond plus.
J'ai donc les questions / demandes suivantes:
- Je ne comprends pas ce morceau de code, s'il vous plaît expliquer ce qui se passe exactement.
- S'il vous plaît expliquer comment cette partie a être réécrite te afin qu'il « travailler » dans VS.
- S'il vous plaît expliquer comment je le convertir en VB.NET. Je l'ai essayé en utilisant des convertisseurs en ligne sans résultat.
La solution
- KeyValuePair nécessite deux arguments de type. Dans votre déclaration de délégué, il dit simplement
KeyValuePair item
, sans argument de type. Changer celadelegate(KeyValuePair<string,string> item)
-
HttpUtility
est déclaré dans l'espace de nomsSystem.Web
; ajouterusing System.Web;
aux déclarations en utilisant au début du fichier.
Personnellement, je trouve plus facile et plus propre à utiliser le style lambda pour ce genre de code:
byte[] buffer =
Encoding.UTF8.GetBytes(
String.Join("&",
Array.ConvertAll<KeyValuePair<string, string>, string>(
inputs.ToArray(), (item) => item.Key + "=" + HttpUtility.UrlEncode(item.Value))));
Une fois que vous avez obtenu le code C # pour travailler, DeveloperFusion C # pour le convertisseur de VB.NET fait le travail:
' 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))))
Autres conseils
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);
})));
essayer.
-
Le code semble être la construction d'une liste de requêtes GET des articles par exemple
key1=value1&key2=value2
. Cela se fait en convertissant d'abord la matrice deinputs
en éléments individuels dekey=value
lesString.Join
ing puis avec une esperluette. Il retourne ensuite les octets UTF8 dans un tableau. -
Cela fonctionne (voir code).
-
Je ne suis pas un programmeur VB.NET, désolé, mais je vais avoir un aller dans une seconde.
Il est de convertir la liste des entrées contenant des paires clé / valeur en une chaîne qui ressemble beaucoup à une chaîne de requête (par exemple. Item1 = valeur1 & item2 = valeur2), puis en convertissant ce que dans le tableau d'octets de la mémoire tampon en utilisant le codage 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