通过键获取字典值


181

如何通过按功能获取字典值

我的功能代码是这样的(以及我尝试但不起作用的命令):

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

我想要这样的东西:
on XML_Array函数为
字符串xmlfile = Settings.xml

Answers:


247

就这么简单:

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

72

为什么不只在字典上使用键名,C#有以下功能:

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

如果您查看提示建议:

在此处输入图片说明


4
如果密钥不存在,它将引发异常。这就是为什么其他人的答案建议您使用TryGetValue的原因。
Ladislav Ondris '18

我不认为这就是原因。
FrenkyB

1
你什么意思?
Ladislav Ondris '18

1
我不认为这是其他人建议使用TryGetValue的原因。我的解决方案是简化,这是我所不知道的。找到后,将其粘贴到此处。似乎很多其他人也不知道这一点。否则,他们也可以粘贴此答案,并添加如果键不存在则抛出异常。无论如何,感谢您的警告。
FrenkyB

31

那不是TryGetValue工作原理。它返回truefalse基于是否找到密钥,out如果存在密钥,则将其参数设置为相应的值。

如果要检查密钥是否存在并在丢失密钥时进行一些操作,则需要这样的操作:

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

这是我在源代码中使用的示例。我正在从字典中从元素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。

亲切的问候,

奥兹伦·西罗拉(Ozren Sirola)


1

我在函数中使用与dasblinkenlight相似的方法,以从Cookie返回单个键值,该Cookie包含加载到Dictionary中的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函数,用于获取http cookie的总体值。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.