解释一下C#代码并转换为VB.NET

时间:2010-01-27 08:50:29

标签: c# vb.net compiler-construction

昨天我问过questionRubens 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错误。不幸的是,鲁本斯不再回复了。

所以我有以下问题/要求:

  1. 我不明白这段代码,请详细说明发生的事情。
  2. 请解释如何重写此部分以使其在VS中“工作”。
  3. 请解释我应该如何将其转换为VB.NET。我尝试使用在线转换器无济于事。

3 个答案:

答案 0 :(得分:4)

  • KeyValuePair需要两个类型参数。在你的委托声明中它简单地说KeyValuePair item,没有类型参数。将其更改为delegate(KeyValuePair<string,string> item)
  • HttpUtilitySystem.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);
            })));

试试。

  1. 代码似乎正在构建项目的GET请求列表,例如key1=value1&key2=value2。首先将inputs数组转换为key=value的单个元素,然后String.Join将它们与&符号一起转换,即可完成此操作。然后它返回数组中的UTF8字节。

  2. 这有效(见代码)。

  3. 我不是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