Linq从Dictionary <object,bool> </object,bool>获取对象或新对象

时间:2015-01-16 18:27:07

标签: c# linq dictionary linq-to-objects default-value

我知道今天有一些帖子来自我,但是希望你们继续做得很棒......

所以我有一个

Dictionary<obj, bool> objDict;

如果没有返回新版本的话,我试图获得单个对象...

obj foo = objDict.Keys.SingleOrDefault(x => x.id == t.id).DefaultIfEmpty((new obj() );

这会引发一些错误,主要是转换...

有没有办法从字典中返回单个密钥或在新密钥不存在的情况下返回默认值...

2 个答案:

答案 0 :(得分:4)

TryGetValue尝试从密钥中获取值,如果实际上存在该密钥的值。

如果要在密钥不存在时向字典添加新值,则没有单个方法可以为您完成所有这些({{1}有一个,名为ConcurrentDictionary)。要获得GetOrAdd的行为,您需要创建自己的方法来调用Dictionary,并在返回TryGetValue时添加新的键/值对。

请注意,您不应该对false进行线性搜索,以尝试找到与您拥有的密钥相等的密钥。 Dictionary的整个设计允许快速查找,您甚至不使用它。

答案 1 :(得分:1)

试试这个:

obj yourObject;
objDict.TryGetValue(t.Id, out yourObject) ? yourObject : new obj();