昨天我问了这个问题。 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 中给出了 这些 错误。不幸的是鲁本斯不再回复了。
所以我有以下问题/要求:
KeyValuePair item
,没有类型参数。将其更改为delegate(KeyValuePair<string,string> item)
HttpUtility
在 System.Web
命名空间中声明;将 using System.Web;
添加到文件开头的 using 语句中。就我个人而言,我发现对此类代码使用 lambda 样式更容易、更简洁:
byte[] buffer =
Encoding.UTF8.GetBytes(
String.Join("&",
Array.ConvertAll<KeyValuePair<string, string>, string>(
inputs.ToArray(), (item) => item.Key + "=" + HttpUtility.UrlEncode(item.Value))));
一旦您获得了可以运行的 C# 代码,DeveloperFusion C# 到 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