通过键获取字典值

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

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

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":
982239 次浏览

其实很简单:

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

这不是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
}
static void XML_Array(Dictionary<string, string> Data_Array)
{
String value;
if(Data_Array.TryGetValue("XML_File", out value))
{
// ... Do something here with value ...
}
}
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;
}
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"];
}

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

只需使用字典上的键名。c#有这样的功能:

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

如果你看一下建议:

Enter image description here

这是我在源代码中使用的一个例子。 我从字典中获取关键价值,从元素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。

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'
if (Data_Array["XML_File"] != "") String xmlfile = Data_Array["XML_File"];
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;

(我在另一个问题上发布了这个,我不知道如何链接到它,所以在这里) 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}");
}