(或Bar<TSuperClass>
)
我有这样的情况:
class Foo<TOther, TFoo>
{
static implicit operator Foo<TOther, TFoo>(Bar<TFoo> bar) { }
}
class Bar<TBar> { }
当我想做这样的事情时,我遇到了问题:
public static Foo<int, IEnumerable<string>> Example() {
return new Bar<List<string>>();
}
这可能会引发类型错误,因为我无法在 从Bar隐式转换为Foo,TBar实现TFoo。
我当然可以将逻辑提取到Bar的方法中以进行显式转换 到Foo并在那里添加约束,但是在我的实际用例中,我有多个 Foo的泛型类型参数,并且只有一个映射到Bar,所以我不得不 调用该方法时,应明确指定其他类型的参数。
我也可以指定一个IFoo<out TFoo>
使其协变,但是逻辑上
Foo实现的接口在接口中是(不容易)描述的。
在隐式运算符中这样的约束可能吗?