在下面的代码中,我在'action(u)',“Invalid Parameters”中收到错误,即使泛型的类型约束相同。为什么这样,我该怎么办?
public class Test<T> : IDoStuff where T : SampleA
{
Action<T> action;
void DoStuff<U>(U u) where U : SampleA
{
action(u);
}
}
答案 0 :(得分:4)
让我们说SampleA代表动物,你这样做
public class Bird : SampleA { }
public class Dog : SampleA { }
Test<Bird> b = new Test<Bird>();
b.DoStuff<Dog>();
字段action
现在知道如何对Bird进行操作,但不知道如何对你传递它的Dog,即使它们共享一个接口和公共基类。
您可以通过更改此行
来完成此工作Action<T> action;
到
Action<SampleA> action;
答案 1 :(得分:2)
U
和T
不一样,即使它们是从同一个基类派生的。