10

我有一个 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.Core&System.Linq库导入到项目中,我的 dev-env 智能感知中也没有显示任何扩展的 LINQ 扩展。所以现在,除非有人可以帮助我让 LINQ 扩展出现在 Intellisense 中,否则它们是不可能的。

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

4

3 回答 3

10

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

升c

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

另外,我真的不知道 _set 是什么。也许你必须投:

c-夏普:

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())

希望这会有所帮助,

于 2012-11-28T17:11:12.950 回答
6

就您的非 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
于 2012-11-28T16:53:13.277 回答
3

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())
于 2012-11-28T22:29:25.737 回答