如何通过字典获取价值

时间:2019-04-02 09:34:48

标签: c#

当我尝试从Dictionary键获取值时,它返回错误

我尝试了以下方法:

public Dictionary<string, string> Credentials { get; set; }
Approach1: Credentials["Password"]

KeyName正确并且存在于我的字典中 enter image description here

enter image description here 返回错误

  

+ Credentials [“ 0”]'Credentials [“ 0”]'引发了类型为'System.Collections.Generic.KeyNotFoundException'string的异常   {System.Collections.Generic.KeyNotFoundException}

但是下面的代码按预期工作

Credentials.TryGetValue(Credentials.FirstOrDefault().Key, out string password);

我需要使用出现错误的字典中的键来获取价值。

2 个答案:

答案 0 :(得分:4)

这里的问题仅仅是因为您使用了错误的密钥。如果您想知道密钥是什么,请非常仔细查看Credentials.FirstOrDefault().Key。没有最小的复制,我无法告诉您是什么,但就我个人而言,我怀疑它是尾随空白。

尝试:

var key = Credentials.FirstOrDefault().Key;
Console.WriteLine("'" + key + "'");

此处引号的要点是使多余的空白显而易见。但这并没有得出明显的答案:您需要查看实际的字符数据(ToCharArray())-可能存在Unicode恶作剧。

但是键不是"0",它只是被视为可枚举的索引。

答案 1 :(得分:1)

问题所声称的内容无法复制。这种基本功能使任何问题在2005年引入Dictionary<>时就已经注意到。

var Credentials=new Dictionary<string,string>();
Credentials["User"]="2004";
Credentials["Password"]="201900";

Debug.Assert(Credentials["Password"]=="201900");

做什么抛出的东西是

var x=Credentials["0"];

这将正确抛出:

System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
   at System.ThrowHelper.ThrowKeyNotFoundException()
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)

因为字典中没有这样的键。

也许正在尝试按索引读取字典项?无论如何,正确的呼叫应该是:

var x=dict.ElementAt(0);

字典的索引器不能用于按索引访问项目。实际上,字典没有任何有意义的顺序。从文档中:

  

出于枚举目的,字典中的每个项目都被视为代表值及其键的KeyValuePair结构。物品的退还顺序是不确定的。

的顺序可以随着项目添加到索引而改变。