首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >协方差与反方差混淆

协方差与反方差混淆
EN

Stack Overflow用户
提问于 2015-05-27 14:54:35
回答 2查看 91关注 0票数 3

我对C#的反向/协方差是如何工作的感到困惑。我有以下伪代码

代码语言:javascript
复制
public static void Main()
{
    Action<string> action = e => Console.WriteLine(e);
    Execute(action);
}

private static void Execute(Action<object> action)
{
    action("hello world");
}

抛出

CS1502:最适合.有一些无效的参数

我也不太清楚为什么。另外,怎样才是正确的方法呢?

在实际场景中,我使用的是一个基本接口,而不是在具体实例中传递的对象。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-27 14:58:19

Action<in T>是相反的,这意味着您可以将“更大的”类型传递到方法中。因为stringobject更小(更具体或更派生),所以会出现编译时错误。如果您逆转了您的示例,并创建了一个Action<object>而不是Action<string>,那么您的方法将编译:

代码语言:javascript
复制
public static void Main()
{
    Action<object> action = e => Console.WriteLine(e);
    Execute(action);
}

private static void Execute(Action<string> action)
{
    action("hello world");
}
票数 5
EN

Stack Overflow用户

发布于 2015-05-27 14:57:48

Actions和Funcs在其参数类型中是反变体--这意味着只有当UT的子类型时,才能将Action<T>分配给Action<U>。在您的示例中,objectstring的超级类型,因此赋值无效。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30486071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档