До сегодняшнего дня мое понимание классов .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?
Заранее благодарю вас!