Explique a parte do código C# e a conversão para vb.net
-
23-09-2019 - |
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);
})));
Dá esses Erros no Visual Studio. Infelizmente, Rubens não responde mais.
Então, eu tenho as seguintes perguntas / solicitações:
- Não entendo este código, explique exatamente o que está acontecendo.
- Por favor, explique como esta parte é reescrita para que "trabalhe" em vs.
- Por favor, explique como eu deveria convertê -lo em vb.net. Eu tentei usando conversores on -line sem sucesso.
Solução
- KeyValuepair requer dois argumentos de tipo. Em sua declaração delegada, diz simplesmente
KeyValuePair item
, sem argumentos de tipo. Mude isso paradelegate(KeyValuePair<string,string> item)
HttpUtility
é declarado noSystem.Web
espaço para nome; adicionarusing 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.
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 oinputs
matriz em elementos individuais dekey=value
entãoString.Join
juntamente com um ampersa e. Em seguida, ele retorna os bytes UTF8 em uma matriz.Isso funciona (consulte o código).
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