在声明时将键/值添加到字典


72

我认为今天非常容易。在C#中,其:

Dictionary<String, String> dict = new Dictionary<string, string>() { { "", "" } };

但是在vb中,以下操作无效。

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) (("",""))

我很确定有一种在声明时添加它们的方法,但是我不确定如何添加。是的,我想在声明时(而不是其他时间)添加它们。:)所以希望这是可能的。谢谢大家。

我也尝试过:

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) ({"",""})

和...

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) {("","")}

和...

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) {{"",""}}

Answers:


115

在VB.NET 10中这是可能的:

Dim dict = New Dictionary(Of Integer, String) From {{ 1, "Test1" }, { 2, "Test1" }}

不幸的是,IIRC VS 2008使用不支持此语法的VB.NET 9编译器。

对于那些可能感兴趣的人,这是幕后发生的事情(C#):

Dictionary<int, string> VB$t_ref$S0 = new Dictionary<int, string>();
VB$t_ref$S0.Add(1, "Test1");
VB$t_ref$S0.Add(2, "Test1");
Dictionary<int, string> dict = VB$t_ref$S0;

精细!我想知道它的行为方式,是否先构建二维数组,然后将其复制到字典中?
vulkanino

德恩 所以你是说自从我使用VS2008以来我做不到?太臭了
XstreamINsanity

2
是的,有点臭:-)升级时间到了。
Darin Dimitrov 2010年

有什么方法可以将二维数组转换为字典?如果是这样,我就那样做。我的目标是拥有ViewModes,每种模式都有一个单独的查询。我想遍历字典,将键添加到视图模式组合框,值将是查询。或类似的东西。也许我将不得不使用二维数组。
XstreamINsanity

我最终只是将其设置为属性并将其添加到其中。不知道为什么我以前没有想到它。
XstreamINsanity

13

大致相同,使用From关键字:

    Dim d As New Dictionary(Of String, String) From {{"", ""}}

但是,这需要该语言的版本10(在VS2010中可用)。


1
这样会更好,因为CLR可以比接受的答案更好地优化此方法。
Altiano Gerung '18

9

这是一个很酷的翻译:您还可以拥有字符串和字符串数组的通用词典。

C#

private static readonly Dictionary<string, string[]> dics = new Dictionary<string, string[]>
        {
            {"sizes", new string[]   {"small", "medium", "large"}},
            {"colors", new string[]  {"black", "red", "brown"}},
            {"shapes", new string[]  {"circle", "square"}}
        };

VB

Private Shared ReadOnly dics As New Dictionary(Of String, String()) From { _
 {"sizes", New String() {"small", "medium", "large"}}, _
 {"colors", New String() {"black", "red", "brown"}}, _
 {"shapes", New String() {"circle", "square"}}}

哈哈:)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.