我正在尝试实现两个通用接口。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);
}