gpt4 book ai didi

.NET 泛型类型约束不等式

转载 作者:行者123 更新时间:2023-12-01 15:02:04 25 4
gpt4 key购买 nike

我正在尝试实现两个通用接口(interface)。 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 .所以我认为,好吧,这是有歧义的,因为它无法判断满足哪个接口(interface)。

所以这引出了我的问题:是否可以使用类型约束来表示这样的内容?

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

最佳答案

C# 规范第 13.4.2 节

If any possible constructed type created from C would, after type arguments are substituted into L, cause two interfaces in L to be identical, then the declaration of C is invalid. Constraint declarations are not considered when determining all possible constructed types.

所以答案是:没有。即使存在诸如 T : !U 之类的类型约束,它也会被忽略,您仍然会遇到相同的冲突。

关于.NET 泛型类型约束不等式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26619042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com