Можно ли инициализировать новый System.Collections.Generic.Dictionary с парами ключ / значение строки? - PullRequest
22 голосов
/ 25 ноября 2008

Можно ли создать и инициализировать объект System.Collections.Generic.Dictionary с парами ключ / значение String в одном операторе?

Я думаю о конструкторе массива строк ..

, например

Private mStringArray As String() = {"String1", "String2", "etc"}

В случае, если это окажется синтаксический сахар , я бы предпочел ответ, который я могу использовать в .Net 2.0 (Visual Studio 2005) и Visual Basic - хотя я Мне любопытно, если это вообще возможно, так что не позволяйте этому оттолкнуть вас; o)

Ответы [ 4 ]

77 голосов
/ 07 июля 2010

Как это:

Dim myDic As New Dictionary(Of String, String) From {{"1", "One"}, {"2", "Two"}}
7 голосов
/ 26 ноября 2008

Я не думаю, что есть способ сделать это из коробки в VB.NET 2, однако вы можете расширить универсальный словарь, чтобы он работал так, как вы хотите.

Консольное приложение ниже иллюстрирует это:

Imports System.Collections.Generic

Module Module1

    Sub Main()

        Dim items As New FancyDictionary(Of Integer, String)(New Object(,) {{1, "First Item"}, {2, "Second Item"}, {3, "Last Item"}})
        Dim enumerator As FancyDictionary(Of Integer, String).Enumerator = items.GetEnumerator

        While enumerator.MoveNext
            Console.WriteLine(String.Format("{0} : {1}", enumerator.Current.Key, enumerator.Current.Value))
        End While

        Console.Read()

    End Sub

    Public Class FancyDictionary(Of TKey, TValue)
        Inherits Dictionary(Of TKey, TValue)

        Public Sub New(ByVal InitialValues(,) As Object)

            For i As Integer = 0 To InitialValues.GetLength(0) - 1

                Me.Add(InitialValues(i, 0), InitialValues(i, 1))

            Next

        End Sub

    End Class

End Module
5 голосов
/ 25 ноября 2008

Попробуйте этот синтаксис:

Dictionary<string, double> dict = new Dictionary<string, double>()
{
  { "pi", 3.14},
  { "e", 2.71 }
 };

Но для этого может потребоваться C # 3 (.NET 3.5)

0 голосов
/ 17 февраля 2012

Я знаю, что это старый пост, но этот вопрос часто возникает. Если

Вот способ объявить и инициализировать словарь одним оператором:

Private __sampleDictionary As New Dictionary(Of Integer, String) From
{{1, "This is a string value"}, {2, "Another value"}}
...