直到今天,我对.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!
}
Run Code Online (Sandbox Code Playgroud)
阅读MSDN文档和各种博客给我留下了更多问题.从我收集的内容来看,似乎Tuple<object>并且Tuple<TWhatever>总是被认为是不相等的,无论两个实例都可以包装相同的对象(盒装或类型转换 - 它们都是相同的).
这真的Tuples应该如何表现?结构兼容性实际上是对平等的另一个限制,而不是放松,因为我一直在解释它直到现在?
如果是这样,BCL中还有什么可以用来满足上述单元测试的期望吗?
先感谢您!
给定2个类型的变量,(int, int)我如何检查它们是否代表相等的值?
例如
var a = (1, 2);
var b = (1, 2);
var c = a == b; // Error CS0019 Operator '==' cannot be applied to operands
// of type '(int, int)' and '(int, int)'
Run Code Online (Sandbox Code Playgroud)
在C#7中这意味着什么?我应该使用.Equals替代方法还是以其他方式使用它?