Wörterbuchwert per Schlüssel abrufen

181

Wie kann ich den Wörterbuchwert per Funktionstaste ermitteln?

Mein Funktionscode ist folgender (und der Befehl, den ich versuche, aber nicht funktioniert habe):

static void XML_Array(Dictionary<string, string> Data_Array)
{
    String xmlfile = Data_Array.TryGetValue("XML_File", out value);
}

Mein Tastencode ist dies

private void button2_Click(object sender, EventArgs e)
{
    Dictionary<string, string> Data_Array = new Dictionary<string, string>();
    Data_Array.Add("XML_File", "Settings.xml");

    XML_Array(Data_Array);
}

Ich möchte so etwas wie folgt :
on- XML_ArrayFunktion ist
Zeichenfolge xmlfile = Settings.xml

Matei Zoc
quelle

Antworten:

247

So einfach ist das:

String xmlfile = Data_Array["XML_File"];

Beachten Sie, dass "XML_File"dieser Code eine Ausnahme auslöst, wenn das Wörterbuch keinen gleichwertigen Schlüssel hat . Wenn Sie zuerst überprüfen möchten, können Sie TryGetValue wie folgt verwenden:

string xmlfile;
if (!Data_Array.TryGetValue("XML_File", out xmlfile)) {
   // the key isn't in the dictionary.
   return; // or whatever you want to do
}
// xmlfile is now equal to the value
Blorgbeard ist raus
quelle
72

Warum nicht einfach den Schlüsselnamen für das Wörterbuch verwenden? C # hat Folgendes:

 Dictionary<string, string> dict = new Dictionary<string, string>();
 dict.Add("UserID", "test");
 string userIDFromDictionaryByKey = dict["UserID"];

Wenn Sie sich den Tippvorschlag ansehen:

Geben Sie hier die Bildbeschreibung ein

FrenkyB
quelle
4
Es wird eine Ausnahme ausgelöst, wenn der Schlüssel nicht vorhanden ist. Aus diesem Grund empfehlen die Antworten anderer Personen, TryGetValue zu verwenden.
Ladislav Ondris
Ich denke nicht, das ist der Grund.
FrenkyB
1
Was meinst du?
Ladislav Ondris
1
Ich glaube nicht, dass dies der Grund ist, warum andere TryGetValue vorschlagen. Meine Lösung ist die Vereinfachung, die mir nicht bewusst war. Wenn ich es herausgefunden habe, habe ich es hier eingefügt. Und es scheint, dass viele andere auch nichts davon wussten. Andernfalls könnten sie diese Antwort auch einfügen und eine Ausnahme hinzufügen, wenn der Schlüssel nicht vorhanden ist. Trotzdem danke für die Warnung.
FrenkyB
31

So funktioniert das nicht TryGetValue. Es gibt zurück trueoder falsebasiert darauf, ob der Schlüssel gefunden wurde oder nicht, und setzt seinen outParameter auf den entsprechenden Wert, wenn der Schlüssel vorhanden ist.

Wenn Sie überprüfen möchten, ob der Schlüssel vorhanden ist oder nicht, und etwas tun möchten, wenn er fehlt, benötigen Sie Folgendes:

bool hasValue = Data_Array.TryGetValue("XML_File", out value);
if (hasValue) {
    xmlfile = value;
} else {
    // do something when the value is not there
}
dasblinkenlight
quelle
21
Dictionary<String,String> d = new Dictionary<String,String>();
        d.Add("1","Mahadev");
        d.Add("2","Mahesh");
        Console.WriteLine(d["1"]);// it will print Value of key '1'
Mahadev Mähne
quelle
5
static void XML_Array(Dictionary<string, string> Data_Array)
{
    String value;
    if(Data_Array.TryGetValue("XML_File", out value))
    {
     ... Do something here with value ...
    }
}
aqwert
quelle
5
static String findFirstKeyByValue(Dictionary<string, string> Data_Array, String value)
{
    if (Data_Array.ContainsValue(value))
    {
        foreach (String key in Data_Array.Keys)
        {
            if (Data_Array[key].Equals(value))
                return key;
        }
    }
    return null;
}
Jacek Lisiński
quelle
2
          private void button2_Click(object sender, EventArgs e)
            {
                Dictionary<string, string> Data_Array = new Dictionary<string, string>();
                Data_Array.Add("XML_File", "Settings.xml");

                XML_Array(Data_Array);
            }
          static void XML_Array(Dictionary<string, string> Data_Array)
            {
                String xmlfile = Data_Array["XML_File"];
            }
Sumon Banerjee
quelle
2

Hier ist ein Beispiel, das ich in meinem Quellcode verwende. Ich erhalte Schlüssel und Wert aus dem Wörterbuch von Element 0 bis zur Anzahl der Elemente in meinem Wörterbuch. Dann fülle ich mein string [] Array, das ich als Parameter nach in meiner Funktion sende und das nur params string [] akzeptiert.

    Dictionary<string, decimal> listKomPop = addElements();
    int xpopCount = listKomPop.Count;
    if (xpopCount > 0)
    {
        string[] xpostoci = new string[xpopCount];
        for (int i = 0; i < xpopCount; i++)
        {
            /* here you have key and value element */
            string key = listKomPop.Keys.ElementAt(i);
            decimal value = listKomPop[key];

            xpostoci[i] = value.ToString();
        }
    ...

Hoffe das wird dir und den anderen helfen. Diese Lösung funktioniert auch mit SortedDictionary.

Mit freundlichen Grüßen,

Ozren Sirola

Shixx
quelle
1

Ich verwende eine ähnliche Methode wie dasblinkenlight in einer Funktion, um einen einzelnen Schlüsselwert aus einem Cookie zurückzugeben, das ein JSON-Array enthält, das wie folgt in ein Wörterbuch geladen wurde:

    /// <summary>
    /// Gets a single key Value from a Json filled cookie with 'cookiename','key' 
    /// </summary>
    public static string GetSpecialCookieKeyVal(string _CookieName, string _key)
    {
        //CALL COOKIE VALUES INTO DICTIONARY
        Dictionary<string, string> dictCookie =
        JsonConvert.DeserializeObject<Dictionary<string, string>>
         (MyCookinator.Get(_CookieName));

        string value;
        if (dictCookie.TryGetValue( _key, out value))
        {
            return value;
        }
        else
        {
            return "0";
        }

    }

Wobei "MyCookinator.Get ()" eine weitere einfache Cookie-Funktion ist, die einen http-Cookie-Gesamtwert erhält.

Martin Sansone - MiOEE
quelle
-1
if (Data_Array["XML_File"] != "") String xmlfile = Data_Array["XML_File"];
Abdalla Elmedani
quelle