Is C# 4.0 Tuple covariant

前端 未结 2 430
误落风尘
误落风尘 2021-01-04 09:45

(I would check this out for myself, but I don\'t have VS2010 (yet))

Say I have 2 base interfaces:

IBaseModelInterface
IBaseViewInterface
2条回答
  •  余生分开走
    2021-01-04 10:12

    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.

提交回复
热议问题