我有一个声明为var as Dictionary(of String, String)
的Dictionary对象。
我正在尝试使用Generic Collection可用的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
&amp;项目中的System.Linq
库没有扩展的LINQ扩展在我的dev-env intellisense中出现。所以,就目前而言,除非有人可以帮助我将LINQ扩展程序显示在Intellisense中,否则它们是不可能的。
发现LINQ扩展没有出现的问题,所以他们回到了桌子上;)
答案 0 :(得分:8)
我会用Linq这样编写整个方法块(对不起C#-vb.net汤...)
return String.Join(",",Me._set.Select(kvp=>String.Format("{0}={1}",kvp.Key, kvp.Value).ToArray());
另外,我真的不知道_set是什么。也许你必须施展:
return String.Join(",", Me._set.Cast<KeyValuePair<String,String>>().Select(kvp=>String.Format("{0}={1}",kvp.Key, kvp.Value).ToArray());
return String.Join(", ", Me.Select(Function(kvp) String.Format("{0}={1}", kvp.Key, kvp.Value).ToArray()))
希望这会有所帮助,
答案 1 :(得分: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 :(得分: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())