Tja*_*alt 1 c# linq dictionary compare tuples
根据MSDN文档,一个Tuple对象Equals方法将使用两个Tuple对象的值.
为什么以下内容不会产生相同的结果:
[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);
}
Run Code Online (Sandbox Code Playgroud)
为什么values.FirstOrDefault(x => x.Key == new Tuple<string, string>("1", "2"))回到null这里为values.TryGetValue(new Tuple<string, string>("1", "2"), out value);找到正确的键和返回值?
你正在使用==,它没有超载Tuple<,>,因此它使用了引用标识检查...并且当你构造了一个新的元组时,它将永远不会成立.
这是正确的,但不受欢迎:
// Don't do this!
values.FirstOrDefault(x => new Tuple<string, string>("1", "2").Equals(x.Key))
Run Code Online (Sandbox Code Playgroud)
那会: