получить значение словаря по ключу

183

Как я могу получить значение словаря по ключу на функции

мой код функции это (и команда, что я пытаюсь, но не работает):

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

мой код кнопки это

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

Я хочу что - то вроде этого:
на XML_Arrayфункции будет
строка XMLFILE = Settings.xml

Матей Зок
источник

Ответы:

249

Это так просто, как это:

String xmlfile = Data_Array["XML_File"];

Обратите внимание, что если в словаре нет равного ключа "XML_File", этот код вызовет исключение. Если вы хотите проверить сначала, вы можете использовать TryGetValue следующим образом:

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 вышел
источник
73

Почему бы просто не использовать имя ключа в словаре, C # имеет это:

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

Если вы посмотрите на совет подсказки:

введите описание изображения здесь

FrenkyB
источник
4
Выдает исключение, если ключ не существует. Вот почему ответы других людей предполагают, что вы должны использовать TryGetValue.
Ладислав Ондрис
Я так не думаю, в этом причина.
FrenkyB
1
Что вы имеете в виду?
Ладислав Ондрис
1
Я не думаю, что это причина, по которой другие предлагают TryGetValue. Мое решение - упрощение, о котором я не знал. Когда я узнал об этом, я вставил это сюда. И, похоже, многие другие об этом тоже не знали. В противном случае они также могут вставить этот ответ и добавить исключение, если ключ не существует. В любом случае, спасибо за предупреждение.
FrenkyB
31

Это не так, как TryGetValueработает. Он возвращает trueили falseосновывается на том, найден ключ или нет, и устанавливает для его outпараметра соответствующее значение, если ключ существует.

Если вы хотите проверить, есть ключ или нет и сделать что-то, когда он отсутствует, вам нужно что-то вроде этого:

bool hasValue = Data_Array.TryGetValue("XML_File", out value);
if (hasValue) {
    xmlfile = value;
} else {
    // do something when the value is not there
}
dasblinkenlight
источник
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'
Махадев Грива
источник
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
источник
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;
}
Яцек Лисиньски
источник
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
источник
2

Вот пример, который я использую в своем исходном коде. Я получаю ключ и значение из словаря от элемента 0 до количества элементов в моем словаре. Затем я заполняю свой массив string [], который отправляю в качестве параметра после того, как в моей функции, принимающей только params string []

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

Надеюсь, это поможет вам и другим. Это решение также работает с SortedDictionary.

С уважением,

Озрен Сирола

Shixx
источник
1

Я использую метод, аналогичный методу dasblinkenlight в функции, чтобы вернуть одно значение ключа из Cookie, содержащего массив JSON, загруженный в словарь, следующим образом:

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

    }

Где «MyCookinator.Get ()» - еще одна простая функция Cookie, получающая общее значение файла cookie http.

Мартин Сансоне - MiOEE
источник
-1
if (Data_Array["XML_File"] != "") String xmlfile = Data_Array["XML_File"];
Абдалла Эльмедани
источник