sözlük değerini anahtar ile al


183

İşlevdeki tuşla sözlük değerini nasıl alabilirim

benim fonksiyon kodu bu (ve ne denemek ama işe yaramadı komut):

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

düğme kodum bu

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

Bunun gibi bir şey istiyorum:
on XML_Arrayfunction
string olmak xmlfile = Settings.xml

Yanıtlar:


249

Bu kadar basit:

String xmlfile = Data_Array["XML_File"];

Sözlüğün eşdeğer bir anahtarı yoksa "XML_File", bu kodun bir istisna atacağını unutmayın. İlk önce kontrol etmek isterseniz, TryGetValue'yu şu şekilde kullanabilirsiniz:

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

73

Neden sadece sözlükte anahtar adı kullanmakla kalmıyor, C # şu:

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

İpucu önerisine bakarsanız:

resim açıklamasını buraya girin


4
Anahtar yoksa bir istisna atar. Bu yüzden başkalarının cevapları TryGetValue kullanmanız gerektiğini gösteriyor.
Ladislav Ondris

Bence öyle değil.
FrenkyB

1
Ne demek istiyorsun?
Ladislav Ondris

1
Ben başkalarının TryGetValue önermek nedeni olduğunu sanmıyorum. Benim çözümüm farkında olmadığım basitleştirmedir. Onu bulduğumda buraya yapıştırdım. Ve görünüşe göre pek çok başka insan da bunu bilmiyordu. Aksi takdirde, bu yanıtı yapıştırabilir ve anahtar yoksa istisna getiren ekleyebilirler. Her neyse, uyarı için teşekkürler.
FrenkyB

31

Bu şekilde çalışmaz TryGetValue. Anahtarın bulunup bulunmadığına bağlı olarak trueveya döndürür falseve anahtar outvarsa parametresini karşılık gelen değere ayarlar .

Anahtarın orada olup olmadığını kontrol etmek ve eksikken bir şey yapmak istiyorsanız, böyle bir şeye ihtiyacınız var:

bool hasValue = Data_Array.TryGetValue("XML_File", out value);
if (hasValue) {
    xmlfile = value;
} else {
    // do something when the value is not there
}

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 ...
    }
}

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

2

İşte kaynak kodumda kullandığım örnek. Sözlük 0'dan Sözlük'teki öğe sayısına kadar anahtar ve değer alıyorum . Sonra sadece params string [] kabul benim işlev sonra parametre olarak göndermek benim string [] dizisini doldurun

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

Umarım bu size ve diğerlerine yardımcı olacaktır. Bu çözüm SortedDictionary ile de çalışır.

Saygılarımla,

Özren Sirola


1

Ben dasblinkenlight'ın aşağıdaki gibi bir Sözlük yüklü bir JSON dizisi içeren bir çerezden tek bir anahtar değeri döndürmek için bir işlevi için benzer bir yöntem kullanın:

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

    }

Burada "MyCookinator.Get ()", http çerezinin genel değerini alan başka bir basit Cookie işlevidir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.