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