obtenir la valeur du dictionnaire par clé

200

Comment puis-je obtenir la valeur du dictionnaire par touche sur la fonction

mon code de fonction est le suivant (et la commande ce que j'essaye mais n'a pas fonctionné):

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

mon code de bouton est le suivant

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);
}

Je veux quelque chose comme ceci:
on XML_Arrayfunction to be
string xmlfile = Settings.xml

Matei Zoc
la source

Réponses:

272

C'est aussi simple que ça:

String xmlfile = Data_Array["XML_File"];

Notez que si le dictionnaire n'a pas de clé égale "XML_File", ce code lèvera une exception. Si vous voulez vérifier d'abord, vous pouvez utiliser TryGetValue comme ceci:

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 est sorti
la source
83

Pourquoi ne pas simplement utiliser le nom de la clé sur le dictionnaire, C # a ceci:

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

Si vous regardez la suggestion de conseil:

entrez la description de l'image ici

FrenkyB
la source
4
Il lève une exception si la clé n'existe pas. C'est pourquoi les réponses d'autres personnes suggèrent que vous devriez utiliser TryGetValue.
Ladislav Ondris
1
Je ne pense pas que ce soit la raison pour laquelle d'autres suggèrent TryGetValue. Ma solution est la simplification, dont je n'étais pas au courant. Quand je l'ai découvert, je l'ai collé ici. Et il semble que beaucoup d'autres ne le savaient pas non plus. Sinon, ils pourraient également coller cette réponse et ajouter cette exception si la clé n'existe pas. Quoi qu'il en soit, merci pour l'avertissement.
FrenkyB
34

Ce n'est pas ainsi que ça TryGetValuemarche. Il retourne trueou falseselon que la clé est trouvée ou non, et définit son outparamètre sur la valeur correspondante si la clé est là.

Si vous voulez vérifier si la clé est là ou non et faire quelque chose quand elle manque, vous avez besoin de quelque chose comme ceci:

bool hasValue = Data_Array.TryGetValue("XML_File", out value);
if (hasValue) {
    xmlfile = value;
} else {
    // do something when the value is not there
}
Sergey Kalinichenko
la source
24
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 Mane
la source
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
la source
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
la source
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
la source
2

Voici un exemple que j'utilise dans mon code source. J'obtiens la clé et la valeur du dictionnaire de l'élément 0 au nombre d'éléments de mon dictionnaire. Ensuite, je remplis ma chaîne [] tableau que j'envoie en paramètre après dans ma fonction qui n'accepte que la chaîne de paramètres []

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();
    }
...

Cette solution fonctionne également avec SortedDictionary.

Shixx
la source
1

J'utilise une méthode similaire à celle de dasblinkenlight dans une fonction pour renvoyer une valeur de clé unique à partir d'un cookie contenant un tableau JSON chargé dans un dictionnaire comme suit:

    /// <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";
        }

    }

Où "MyCookinator.Get ()" est une autre fonction de cookie simple qui obtient une valeur globale de cookie http.

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