Вчера я спросил об этом question. Rubens Farias ответил на это, указав на этот фрагмент кода, который он написал. Следующая часть не может быть скомпилирована 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);
})));
Он дает эти ошибки в Visual Studio. К сожалению, Rubens больше не отвечает.
Итак, у меня есть следующие вопросы/запросы:
KeyValuePair item
, без аргументов типа. Измените это на delegate(KeyValuePair<string,string> item)
HttpUtility
объявляется в пространстве имен System.Web
; добавьте using System.Web;
в операторы using в начале файла.Лично мне легче и проще использовать лямбда-стиль для этого типа кода:
byte[] buffer =
Encoding.UTF8.GetBytes(
String.Join("&",
Array.ConvertAll<KeyValuePair<string, string>, string>(
inputs.ToArray(), (item) => item.Key + "=" + HttpUtility.UrlEncode(item.Value))));
После того, как вы получили код С# для работы, конвертер DeveloperFusion С# в VB.NET выполняет следующее задание:
' 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))))
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);
})));
Попробуйте это.
Этот код, по-видимому, строит список запросов GET, например. key1=value1&key2=value2
. Это делается путем преобразования массива inputs
в отдельные элементы key=value
, а затем String.Join
их вместе с амперсандом. Затем он возвращает байты UTF8 в массиве.
Это работает (см. код).
Я не программист VB.NET, извините, но через секунду у меня получится.
Он преобразует список входов, содержащий пары "ключ/значение", в строку, которая похожа на строку запроса (например, item1 = value1 & item2 = value2), а затем преобразует ее в массив байтовых буферов, используя кодировку 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