До сегодняшнего дня мое понимание классов .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> всегда считаются не равными, независимо от того, что оба экземпляра могут обернуть один и тот же объект (в коробке или typecast - все равно).
Действительно ли это как Tuples должно вести себя? Является ли структурная совместимость фактически дополнительным ограничением на равенство, а не релаксацией, поскольку я до сих пор его интерпретировал?
Если это так, есть ли что-нибудь еще в BCL, которое я могу использовать для удовлетворения ожиданий вышеупомянутого unit test?
Заранее благодарю вас!