首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dictionary.TryGetValue对FirstOrDefault

dictionary.TryGetValue对FirstOrDefault
EN

Stack Overflow用户
提问于 2016-02-03 08:57:57
回答 1查看 2.2K关注 0票数 1

根据MSDN文档,元组对象等于方法将使用两个元组对象的值。

为什么下列情况不产生同样的结果:

代码语言:javascript
复制
[Test]
public void TestTupleWithDictionary() 
{
    Dictionary<Tuple<string, string>, string> values = new Dictionary<Tuple<string, string>, string>();

    values.Add(new Tuple<string, string>("1", "1"), "Item 1");
    values.Add(new Tuple<string, string>("1", "2"), "Item 2");

    Assert.IsNotNull(values.FirstOrDefault(x => x.Key == new Tuple<string, string>("1", "2")));

    string value;
    values.TryGetValue(new Tuple<string, string>("1", "2"), out value);

    Assert.IsNotNullOrEmpty(value);
}

为什么values.FirstOrDefault(x => x.Key == new Tuple<string, string>("1", "2"))返回null,因为values.TryGetValue(new Tuple<string, string>("1", "2"), out value);找到正确的键并返回值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-03 09:02:13

您使用的是==,它没有重载Tuple<,>,所以它使用的是引用身份检查.当你构建了一个新的元组时,这是不可能的。

这是正确的,但不可取:

代码语言:javascript
复制
// Don't do this!
values.FirstOrDefault(x => new Tuple<string, string>("1", "2").Equals(x.Key))

这将:

  • 在每次迭代中创建一个新的元组
  • 必须仔细检查每个条目,直到找到匹配的条目,这是一个O(N)操作.与字典查找的正常-O(1)操作相比
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35172431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档