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:

  1. Je ne comprends pas ce morceau de code, s'il vous plaît expliquer ce qui se passe exactement.
  2. S'il vous plaît expliquer comment cette partie a être réécrite te afin qu'il « travailler » dans VS.
  3. 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.
Était-ce utile?

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 cela delegate(KeyValuePair<string,string> item)
  • HttpUtility est déclaré dans l'espace de noms System.Web; ajouter using 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.

  1. 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 de inputs en éléments individuels de key=value les String.Joining puis avec une esperluette. Il retourne ensuite les octets UTF8 dans un tableau.

  2. Cela fonctionne (voir code).

  3. 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
scroll top