当泛型类型约束相同时,为什么会出现“无效参数”错误?

时间:2015-05-03 01:22:31

标签: c# generics constraints

在下面的代码中,我在'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);
            }

        }

2 个答案:

答案 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)

UT不一样,即使它们是从同一个基类派生的。