3

2 つの汎用インターフェイスを実装しようとしています。と の両方をITwoWayMapper<T,U>実装することは理にかなっています。だから私がそれをやろうとすると:IOneWayMapper<T,U>IOneWayMapper<U,T>

public interface IOneWayMapper<T, U>
{
    U Map(T source);
}

public interface ITwoWayMapper<T, U> :
    IOneWayMapper<T, U>,
    IOneWayMapper<U, T>
{
    TTwo Map(TOne source);
    TOne Map(TTwo source);
}

エラーが発生しますInterface ITwoWayMapper<T,U> cannot implement both IOneWayMapper<T,U> and IOneWayMapper<U,T> because they may unify for some type parameter substitutions。ですから、どのインターフェイスが満たされているかを判断できなかったため、これがあいまいであることは理にかなっていると思います。

したがって、これは私の質問につながります:型制約を使用してこのようなことを言うことは可能ですか?:

public interface ITwoWayMapper<T, U> :
    IOneWayMapper<T, U>,
    IOneWayMapper<U, T>
    where T: !U
{
    TTwo Map(TOne source);
    TOne Map(TTwo source);
}
4

1 に答える 1