До сегодняшнего дня мое понимание классов .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 что-нибудь еще, что я могуиспользовать, чтобы оправдать ожидания вышеупомянутого модульного теста?
Заранее спасибо!