昨天我问过question。 Rubens Farias通过指出他写的piece of code来回答它。 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中出现these错误。不幸的是,鲁本斯不再回复了。
所以我有以下问题/要求:
答案 0 :(得分:4)
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# to 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))))
答案 1 :(得分:1)
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程序员,对不起,但我马上就要去了。
答案 2 :(得分:1)
它将包含键/值对的输入列表转换为看起来很像查询字符串的字符串(例如,item1 = value1&amp; 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