我有一组使用泛型和泛型约束的类,我遇到了一个问题,而不是一个显示停止,使代码非常麻烦。我遇到一个问题,编译器告诉我,当两者相关时,它不能将一个参数转换为另一个类型
我在
下面创建了一个简化的reproclass Foo
{
}
class Quux<TFoo> : Bar where TFoo : Foo
{
public Quux(Spong<Bar> spong)
{
}
}
class Baz : Quux<Foo>
{
public Baz(Spong<Baz> bf) : base(bf)
{
}
}
class Spong<TBar> where TBar : Bar
{
}
class Bar
{
}
它是Baz的构造函数,其问题是转发到基类具有以下编译器错误
CS1503 Argument 1: cannot convert from 'TestGenericWeirdness.Spong<TestGenericWeirdness.Baz>' to 'TestGenericWeirdness.Spong<TestGenericWeirdness.Bar>'
当这两种类型通过Quux明显相关时
仅将代码更改为
public Baz(Spong<Bar> bf) : base(bf)
{
}
错误是否消失。现在你可能会说“它真的不是那么大的交易”,但真正的代码是与Aspnet.Identity集成,并且有8个不是1个通用参数,必须完全指定
任何人都知道问题是什么和/或解决方法?