将字典转换为结构化格式的字符串

问题描述 投票:8回答:3

我有一个Dictionary对象声明为var as Dictionary(of String, String)

我正在尝试利用可用于通用集合的LINQ扩展,但仅获得非扩展方法。

我需要将Dictionary集合转换为具有以下模式的字符串: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.CoreSystem.Linq库导入到项目中,我的dev-env intellisense中也没有显示任何扩展的LINQ扩展。因此,到目前为止,除非有人可以帮助我使LINQ扩展出现在Intellisense中,否则它们就不可能了。

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

vb.net collections .net-4.0 generic-collections
3个回答
9
投票

我会像这样用Linq编写整个方法块(对不起C#-vb.net汤...)

c-sharp

return String.Join(",",Me._set.Select(kvp=>String.Format("{0}={1}",kvp.Key, kvp.Value).ToArray());

而且,我真的不知道set是什么。也许您必须强制转换:

c-sharp:

return String.Join(",", Me._set.Cast<KeyValuePair<String,String>>().Select(kvp=>String.Format("{0}={1}",kvp.Key, kvp.Value).ToArray());

vb.net:

return String.Join(", ", Me.Select(Function(kvp) String.Format("{0}={1}", kvp.Key, kvp.Value)).ToArray())

希望这会有所帮助,


5
投票

就您的非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

使用LINQ,您可以这样操作:

Public Overrides Function ToString() As String
    Return String.Join(", ", _set.Select(Function(pair) $"{pair.Key}={pair.Value}"))
End Function

2
投票

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())
© www.soinside.com 2019 - 2024. All rights reserved.