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

我的函数代码(和我尝试的命令不工作):

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":

当前回答

这不是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
}

其他回答

static void XML_Array(Dictionary<string, string> Data_Array)
{
    String value;
    if(Data_Array.TryGetValue("XML_File", out value))
    {
        // ... Do something here with value ...
    }
}

这不是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
}

(我在另一个问题上发布了这个,我不知道如何链接到它,所以在这里) Dictionary<K,V>扩展。我已经用了很长时间了::

public static bool TryGetKey<K, V>(this IDictionary<K, V> instance, V value, out 
K key)
{
    foreach (var entry in instance)
    {
        if (!entry.Value.Equals(value))
        {
            continue;
        }
        key = entry.Key;
        return true;
    }
    key = default(K);
    return false;
}

并使用as:

public static void Main()
{
    Dictionary<string, string> dict = new Dictionary<string, string>()
    {
        {"1", "one"},
        {"2", "two"},
        {"3", "three"}
    };
 
     string value="two"; 
     if (dict.TryGetKey(value, out var returnedKey))
         Console.WriteLine($"Found Key {returnedKey}");
     else
         Console.WriteLine($"No key found for value {value}");
}

我使用类似于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的整体值。

其实很简单:

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