C# 如何在字典中通过键获取值
当我试图从字典键获取值时,它返回错误 我尝试了以下方法:C# 如何在字典中通过键获取值,c#,C#,当我试图从字典键获取值时,它返回错误 我尝试了以下方法: public Dictionary<string, string> Credentials { get; set; } Approach1: Credentials["Password"] 我需要使用字典中的键获取值,因为我得到了错误。这里的问题只是您使用了错误的键。如果您想知道密钥是什么,请仔细查看Credentials.FirstOrDefault().key。我不能告诉你它是什么没有一个最小的复制,但就个人而言,我怀疑
public Dictionary<string, string> Credentials { get; set; }
Approach1: Credentials["Password"]
我需要使用字典中的键获取值,因为我得到了错误。这里的问题只是您使用了错误的键。如果您想知道密钥是什么,请仔细查看
Credentials.FirstOrDefault().key
。我不能告诉你它是什么没有一个最小的复制,但就个人而言,我怀疑这是一个尾随空白
尝试:
这里周围的引号的目的是让额外的空白变得明显。这并没有给出一个明显的答案:您需要查看实际的字符数据(tocharray()
)-可能会有unicode骗局
但是,键不是
“0”
,当被视为可枚举项时,这只是索引。问题所声称的不能重现。这是一个非常基本的特性,任何问题都会在2005年推出字典时被注意到
var Credentials=new Dictionary<string,string>();
Credentials["User"]="2004";
Credentials["Password"]="201900";
Debug.Assert(Credentials["Password"]=="201900");
这将正确地抛出:
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结构。返回项目的顺序未定义
随着项目添加到索引中,顺序可能会更改。您的错误使其看起来像是您正在执行凭据[“0”]
而不是凭据[“密码”]
?我正在执行凭据[“密码”],但根据屏幕截图,它应该是凭据[“1”[“密码”]
:凭据[“1”]
返回一个字典{“Password”,201900}
从中我们通过“Password”
键返回201900
您发布的代码无效。无论您使用的是var result=dict[Key],字典都可以正常工作代码>或dict.TryGetValue(输入,输出var结果)代码>。如果出现该异常,则表示密钥不存在。此外,错误非常明显-使用字符串0
而不是Password
作为密钥。Credentials.FirstOrDefault()。密钥返回正确的值,但当我尝试从该密钥获取值时,我做不到that@Mayank是的,你是——这就是你所说的“不管下面的代码如何按预期工作”——所以:我不认为关键是你所认为的关键。非常非常仔细地检查。是的,你是对的。键具有导致问题的额外空间。谢谢,我也创建了示例代码,对我来说它也在工作,我需要检查为什么我的application@Mayank因为正如其他人所解释的,使用了错误的键。或者您尝试将字典当作数组使用,并尝试传递0
以获取第一项。是的,您是正确的。键具有导致问题的额外空间。非常感谢。
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);