从Foo <TSubClass>到Bar <InterfaceOfTSubClass>的隐式转换

时间:2020-01-16 18:59:10

标签: c# .net

(或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实现的接口在接口中是(不容易)描述的。

在隐式运算符中这样的约束可能吗?

0 个答案:

没有答案