c# - 当泛型类型约束相同时,为什么我会收到 'Invalid Parameters' 错误?

标签 c# generics constraints

在下面的代码中,我在“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/

相关文章:

MySQL基于列值的唯一约束

c# - C#中Thread.Join的意义是什么?

c# - 将通用类转换为接口(interface)

swift - 如何在 Swift 上为堆栈声明 "if optional"

generics - 如何为对特征本身的关联类型的引用编写特征绑定(bind)?

ios - 在 Swift 中向 NSLayoutAnchor 约束添加乘数

javascript - 如何将值从代码隐藏传递到 WP7 中的 javascript 函数

c# - AudioClip 在 Trigger 上只播放一次

c# - 使用 XML 时引用未声明的实体异常

.net - 为什么这个通用转换会失败?