Pergunta

Ontem eu perguntei isso pergunta. Rubens Farias respondeu apontando para isso Participação de código ele escreveu. A parte a seguir não pode ser compilada pelo Beta 2 Profissional do Visual Studio 2010.

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);
            })));

esses Erros no Visual Studio. Infelizmente, Rubens não responde mais.

Então, eu tenho as seguintes perguntas / solicitações:

  1. Não entendo este código, explique exatamente o que está acontecendo.
  2. Por favor, explique como esta parte é reescrita para que "trabalhe" em vs.
  3. Por favor, explique como eu deveria convertê -lo em vb.net. Eu tentei usando conversores on -line sem sucesso.
Foi útil?

Solução

  • KeyValuepair requer dois argumentos de tipo. Em sua declaração delegada, diz simplesmente KeyValuePair item, sem argumentos de tipo. Mude isso para delegate(KeyValuePair<string,string> item)
  • HttpUtility é declarado no System.Web espaço para nome; adicionar using System.Web; para as instruções de uso no início do arquivo.

Pessoalmente, acho mais fácil e limpo usar o estilo Lambda para esse tipo de código:

byte[] buffer =
     Encoding.UTF8.GetBytes(
         String.Join("&",
             Array.ConvertAll<KeyValuePair<string, string>, string>(
                 inputs.ToArray(), (item) => item.Key + "=" + HttpUtility.UrlEncode(item.Value))));

Depois de obter o código C# para funcionar, o DeveloperFusion c# para vb.net O conversor faz o trabalho:

' 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))))

Outras dicas

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);
            })));

Tente isso.

  1. O código parece estar construindo uma lista de solicitações de get de itens, por exemplo key1=value1&key2=value2. Isso é feito primeiro convertendo o inputs matriz em elementos individuais de key=value então String.Joinjuntamente com um ampersa e. Em seguida, ele retorna os bytes UTF8 em uma matriz.

  2. Isso funciona (consulte o código).

  3. Eu não sou um programador do VB.NET, desculpe, mas vou dar um segundo.

Ele está convertendo a lista de entradas que contêm pares de chave/valor em uma string que se parece muito com uma sequência de consulta (por exemplo, item1 = value1 e item2 = value2) e convertendo isso na matriz byte buffer usando a codificação 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top