Vb.net 将字典转换为结构化格式字符串

Vb.net 将字典转换为结构化格式字符串,vb.net,collections,.net-4.0,generic-collections,Vb.net,Collections,.net 4.0,Generic Collections,我有一个Dictionary对象声明为var作为Dictionaryof String,String 我试图利用泛型集合可用的LINQ扩展,但只得到非扩展方法 我需要将字典集合转换为具有以下模式的字符串:key1=val1,key2=val2,…,keyn=valn 一开始,我认为做一个foreach循环很合适,但事实上我是程序员 到目前为止,我所知道的,但怀疑它是产生这种结果的最佳逻辑模式: Public Overrides Function ToString() As String

我有一个Dictionary对象声明为var作为Dictionaryof String,String

我试图利用泛型集合可用的LINQ扩展,但只得到非扩展方法

我需要将字典集合转换为具有以下模式的字符串:key1=val1,key2=val2,…,keyn=valn

一开始,我认为做一个foreach循环很合适,但事实上我是程序员

到目前为止,我所知道的,但怀疑它是产生这种结果的最佳逻辑模式:

Public Overrides Function ToString() As String
    Dim ret As String = ""
    For Each kv As KeyValuePair(Of String, String) In Me._set
        If ret <> String.Empty Then
            ret &= ", "
        End If

        ret &= String.Format("{0}={1}", kv.Key, kv.Value)
    Next

    Return ret
End Function
出于某种原因,尽管我已经将System.Core和System.Linq库导入到项目中,但在我的dev env intellisense中没有显示任何扩展的Linq扩展。所以现在,除非有人能帮我让LINQ扩展在Intellisense中出现,否则它们是不可能的


发现了LINQ扩展没有出现的问题,所以它们又回到了桌面上

对于非LINQ循环,我建议您这样做:

Public Overrides Function ToString() As String
    Dim items As New List(Of String)(_set.Count)
    For Each pair As KeyValuePair(Of String, String) In _set
        items.Add($"{pair.Key}={pair.Value}"))
    Next
    Return String.Join(", ", items)
End Function
Public Overrides Function ToString() As String
    Return String.Join(", ", _set.Select(Function(pair) $"{pair.Key}={pair.Value}"))
End Function
使用LINQ,您可以这样做:

Public Overrides Function ToString() As String
    Dim items As New List(Of String)(_set.Count)
    For Each pair As KeyValuePair(Of String, String) In _set
        items.Add($"{pair.Key}={pair.Value}"))
    Next
    Return String.Join(", ", items)
End Function
Public Overrides Function ToString() As String
    Return String.Join(", ", _set.Select(Function(pair) $"{pair.Key}={pair.Value}"))
End Function

我会像这样用Linq编写整个方法块的。对不起,C-vb.net的汤

夏普 而且,我真的不知道集合是什么。也许你必须投下:

c-夏普: 希望这会有所帮助,

VB.net语法:

Dim dic As New Dictionary(Of String, String)() From {
            {"a", "1"},
            {"b", "2"},
            {"c", "3"},
            {"d", "4"}
            }

Dim s As String = String.Join(",", dic.Select(Function(pair) String.Format("{0}={1}", pair.Key, pair.Value)).ToArray())

我会像这样写Linq为C-vb.net汤感到抱歉。。。var ret=String.Join,,Me.\u set.Selectkvp=>String.Format{0}={1},kvp.Key,kvp.Value.ToArray;把它作为一个答案…我做了足够的C开发来理解它。Net专家似乎更喜欢VB.Net而不是C。他们不会错的。我想我只是涡轮帕斯卡一代,有分号和花括号-你会对LINQ做什么?我不会:我被困在VS2005中,所以我对它不太熟悉。DOH…我有3个版本可以使用2k8、2010和2012。在SL2/3推出2k8后立即离开2k5development@jbl ;p~在你的总体指导中,好吧,现在我们已经到了VS 2017,我想是时候更新我的答案以反映最新的技术了。现在,我的答案中的示例演示了LINQ的使用以及使用插值字符串文字而不是string.Format。在我翻译到VB.Net后,它的工作非常有魅力。转换等价物:String.Join,Me.SelectFunctionkvp String.Format{0}={1},kvp.Key,kvp.Value.ToArray_set是私有变量,它是字符串的字典,StringChanged它使类从字符串的字典扩展而来,因为它使对集合的操作更容易。我在vb.net中发现了一个括号错误。它应该是return String.Join,Me.SelectFunctionkvp String.Format{0}={1},kvp.Key,kvp.Value.toArray括号错误导致它改为打印为System.char[]与上面发布的@jbl完全相同的代码。请添加到线程中,不要只是对已经建议的内容投下更亮的光芒。当我发布这篇文章时,jbl的答案中只有c语法,我很惊讶你认为这值得投反对票,但我可以接受@戈德毕晓普:事实并非如此。人们编辑他们的答案,甚至可能看不出他们有。您将找到多个类似的答案。几乎没有时差。在meta上,它提到了否决票应该取决于isolarion.dic.select中rtaken答案的正确性,这对我不起作用。也许是因为我把它声明为一般对象
Dim dic As New Dictionary(Of String, String)() From {
            {"a", "1"},
            {"b", "2"},
            {"c", "3"},
            {"d", "4"}
            }

Dim s As String = String.Join(",", dic.Select(Function(pair) String.Format("{0}={1}", pair.Key, pair.Value)).ToArray())