在下面的代码中,我在“action(u)”处收到错误,“参数无效”,尽管泛型的类型约束是相同的。为什么会这样?我能做什么?
public class Test<T> : IDoStuff where T : SampleA
{
Action<T> action;
void DoStuff<U>(U u) where U : SampleA
{
action(u);
}
}
最佳答案
假设 SampleA 代表动物,你这样做
public class Bird : SampleA { }
public class Dog : SampleA { }
Test<Bird> b = new Test<Bird>();
b.DoStuff<Dog>();
action
字段现在知道如何对 Bird 执行操作,但不知道如何对传递给它的 Dog 执行操作,即使它们共享一个接口(interface)和公共(public)基类也是如此。
你可以通过改变这一行来完成这项工作
Action<T> action;
到
Action<SampleA> action;
关于c# - 当泛型类型约束相同时,为什么我会收到 'Invalid Parameters' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30009274/