如果Dictionary<object, object>
myDictionary
恰好包含单个项目,检索值对象的最佳方法是什么(如果我不关心关键字)?带有单个项目的字典
if (myDictionary.Count == 1)
{
// Doesn't work
object obj = myDictionary.Values[0];
}
感谢
如果Dictionary<object, object>
myDictionary
恰好包含单个项目,检索值对象的最佳方法是什么(如果我不关心关键字)?带有单个项目的字典
if (myDictionary.Count == 1)
{
// Doesn't work
object obj = myDictionary.Values[0];
}
感谢
取决于无论您希望它失败,如果有多个对象或不是你可以使用
myDictionary.Value.Single();//Will fail if there's more than one
或
myDictionary.Value.First();//Will just return the first regardless of the count
.FirstOrDefault()是最安全的,因为如果没有,它会返回null,并且可以安全地检查null。 – 2010-05-02 20:29:23
@Cylon:但是,由于项目的值为空或者因为没有项目,所以无法确定它是否为空。 – Guffa 2010-05-02 20:34:33
@Gaffa,如果重要,可以通过检查字典中的键数来做出区分。另一方面,我认为创建一个具有相应空值的键是一个错误。 – 2010-05-02 21:12:36
object obj = myDictionary.Values.Single();
我会从来没有为这个假设编码只会是一个。如果你知道总会有一个,那么为什么要使用字典?
我以这种想法来寻找在这种情况下做什么。不幸的是,我的情况正在返回一个Web API的关键和价值。例如,在JSON中,字典将键和值关联在一起,而KeyValuePair将键与“键”相关联,将值与“值”相互关联,而不是彼此关联,而我发现这并不理想。你有什么机会可以扩展你在这个答案中提示的想法? – Ellesedil 2014-05-21 15:27:31
将JSON添加到组合中确实会改变事物;您需要在服务器端建立客户端期望的模型。所以在这种情况下,字典的作品。 – 2014-05-23 11:27:29
我认为你可以使用一个迭代器。
myDictionary.GetEnumerator().Current
枚举器在第一个项目之前启动,您必须调用MoveNext前进到第一个项目。 – Guffa 2010-05-02 20:54:11
您不能直接或索引中获得的价值,你必须要么知道密钥:
object obj = yourDictionary[theKeyThatYouHappenToKnow];
,或者使用枚举:如果您
var en = yourDictionary.GetEnumerator();
en.MoveNext();
object obj = en.Current.Value;
en.Dispose();
正在使用框架3.5,您还可以使用一些扩展方法,如Single
或First
为您使用枚举器。
我很好奇你为什么需要这个... – 2010-05-02 20:57:19