泛型怪异

时间:2017-12-13 09:26:00

标签: c# generics

我有一组使用泛型和泛型约束的类,我遇到了一个问题,而不是一个显示停止,使代码非常麻烦。我遇到一个问题,编译器告诉我,当两者相关时,它不能将一个参数转换为另一个类型

我在

下面创建了一个简化的repro
class 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个通用参数,必须完全指定

任何人都知道问题是什么和/或解决方法?

0 个答案:

没有答案