【发布时间】:2011-02-21 18:24:15
【问题描述】:
直到今天,我对 .NET Tuple 类的理解是它们将 Equals() 的实现委托给它们的内容,让我可以“按价值”对它们进行等同和比较。
然后这个测试出现了,把我弄傻了:
[TestMethod]
public void EquateTwoTuplesWithSameContent()
{
var t1 = Tuple.Create("S");
var t2 = Tuple.Create((object)t1.Item1);
Assert.IsTrue(t1.Equals(t2)); // Boom!
}
阅读 MSDN 文档和各种博客给我留下了更多问题。据我所知,Tuple<object> 和 Tuple<TWhatever> 似乎总是被认为是不相等的,不管这两个实例可能包装同一个对象(装箱或类型转换 - 都是一样的)。
这真的是Tuples 应该表现的方式吗?结构兼容性实际上是对平等的附加约束,而不是放松,正如我一直在解释它吗?
如果是这样,我可以使用 BCL 中的其他内容来满足上述单元测试的期望吗?
提前谢谢你!
【问题讨论】: