271

如何通过函数上的键获取字典值?

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

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函数上的变量为:

string xmlfile = "Settings.xml":
4

11 回答 11

367

就这么简单:

String xmlfile = Data_Array["XML_File"];

请注意,如果字典没有 equals 的键"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
于 2012-08-29T00:42:22.267 回答
114

只需使用字典上的键名即可。C# 有这个:

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

如果您查看提示建议:

在此处输入图像描述

于 2016-09-29T06:42:17.527 回答
38

这不是TryGetValue工作原理。它根据是否找到键返回true或,如果键存在则将其参数设置为相应的值。falseout

如果要检查密钥是否存在并在丢失时执行某些操作,则需要以下内容:

bool hasValue = Data_Array.TryGetValue("XML_File", out value);
if (hasValue) {
    xmlfile = value;
} else {
    // do something when the value is not there
}
于 2012-08-29T00:42:43.233 回答
27
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'
于 2017-10-05T09:31:47.317 回答
6
static void XML_Array(Dictionary<string, string> Data_Array)
{
    String value;
    if(Data_Array.TryGetValue("XML_File", out value))
    {
        // ... Do something here with value ...
    }
}
于 2012-08-29T00:42:47.710 回答
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;
}
于 2014-01-08T18:00:57.217 回答
3
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"];
}
于 2014-01-23T14:01:30.603 回答
3

这是我在源代码中使用的示例。我从字典中获取,从元素 0 到字典中的元素数。然后我填充了我的字符串 [] 数组,该数组在我的函数中作为参数发送,它只接受参数字符串 []

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。

于 2017-04-12T07:42:03.183 回答
2

我在函数中使用与 dasblinkenlight 类似的方法从包含加载到 Dictionary 中的 JSON 数组的 Cookie 中返回单个键值,如下所示:

    /// <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 的整体值。

于 2014-04-18T00:53:23.107 回答
2
Dictionary<int,string> dict = new Dictionary<int,string>{
  {1,"item1"},
  {2,"item2"},
  {3,"item3"},
}

int key = 2 // for example
string result = dict.ContainsKey(key) ? dict[key] : null;
于 2021-04-22T01:36:59.627 回答
-2
if (Data_Array["XML_File"] != "") String xmlfile = Data_Array["XML_File"];
于 2019-01-08T16:50:25.220 回答