(I would check this out for myself, but I don\'t have VS2010 (yet))
Say I have 2 base interfaces:
IBaseModelInterface
IBaseViewInterface
You can inherit from tuple for create your own Covariant Tuple. This way you avoid to have to rewrite your own equalities logic.
public interface ICovariantTuple
{
T1 Item1 { get; }
}
public class CovariantTuple : Tuple, ICovariantTuple
{
public CovariantTuple(T1 item1) : base(item1) { }
}
public interface ICovariantTuple
{
T1 Item1 { get; }
T2 Item2 { get; }
}
public class CovariantTuple : Tuple, ICovariantTuple
{
public CovariantTuple(T1 item1, T2 item2) : base(item1, item2) { }
}
etc.... for 3, 4, 5, 6, 7, 8 items
Compile Fail
Tuple item = new Tuple(null);
Compile Success
ICovariantTuple item = new CovariantTuple(null);
There is no base Tuple after 8 items, but it should be enough.