我想对下面的泛型类型进行限制,但我不确定是否可以按照我的意图进行操作。
public interface IMyClass<in TA, in TB>
{
bool MyMethod<TX, TY>(TX argumentX, TY argumentY);
}
public class MyClass<TA, TB> : IMyClass<TA, TB>
{
public bool MyMethod<TX, TY>(TX argumentX, IEnumerable<TY> argumentsY)
{
// DO STUFF
}
}
TX 和 TY 类型是为了代表 TA 和 TB,但需要是可互换的(这就是为什么我不能在方法中使用 TA 和 TB 而不复制代码)。这就是约束需要发挥作用的方式:
- TX 必须与 TA 或 TB 类型相同。
- TY 必须与 TA 或 TB 类型相同。
- 如果 TX 与 TA 类型相同,则 TY 必须与 TB(和 vv)类型相同。
有没有办法在设计时使用通用约束来强制执行这一点,或者我必须使用异常来实现它以在运行时失败?