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:

  1. Non capisco questo pezzo di codice, si prega di spiegare che cosa sta accadendo esattamente.
  2. Si prega di spiegare come questa parte è te essere riscritto in modo che esso per "lavoro" in VS.
  3. Si prega di spiegare come dovrei convertirlo in VB.NET. Ho provato utilizzando convertitori on-line senza alcun risultato.
È stato utile?

Soluzione

  • KeyValuePair richiede due argomenti di tipo. Nella vostra dichiarazione delegato si dice semplicemente KeyValuePair item, senza argomenti tipo. Cambiare questo per delegate(KeyValuePair<string,string> item)
  • HttpUtility è dichiarata nel namespace System.Web; aggiungi using 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.

  1. Il codice sembra essere la costruzione di una lista GET richiesta di articoli per esempio key1=value1&key2=value2. Questo è fatto convertendo prima matrice inputs in singoli elementi di key=value poi String.Joining insieme con una e commerciale. Quindi restituisce i byte UTF8 in un array.

  2. Questo funziona (vedi codice).

  3. 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top