当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能将IList <ChildType>传递给F(IEnumerable <ParentType>)?

如何解决《为什么我不能将IList<ChildType>传递给F(IEnumerable<ParentType>)?》经验,为你挑选了1个好方法。

我想我可以传递一个IList作为IEnumerable,因为显然在ChildType列表中的每个对象也是ParentType的实例.但是我没有得到编译器的喜爱.我错过了什么?

编辑:添加功能Foo3,它做我想要的.谢谢!

namespace StackOverflow
{
    public class ParentClass
    {
    }

    public class ChildClass : ParentClass
    {
    }

    public class Test
    {
        // works
        static void Foo(ParentClass bar2)
        {
        }

        // fails
        static void Foo2(IEnumerable bar)
        {
        }

        // EDIT: here's the right answer, obtained from the 
        // Charlie Calvert blog post 
        static void Foo3(IEnumerable bar) where T : ParentClass
        {
        }

        public static void Main()
        {
            var childClassList = new List();

            // this works as expected
            foreach (var obj in childClassList)
                Foo(obj);

            // this won't compile
            // Argument '1': cannot convert from 
            // 'System.Collections.Generic.List' 
            // to 'System.Collections.Generic.IEnumerable' 
            Foo2(childClassList);

            // EDIT: this works and is what I wanted
            Foo3(childClassList);
        }
    }
}

JoshBerke.. 5

因为泛型不是共同变体:

Eric Lippert的博客上有一篇很棒的帖子.

Charlie Calvert的另一篇文章就在这里.



1> JoshBerke..:

因为泛型不是共同变体:

Eric Lippert的博客上有一篇很棒的帖子.

Charlie Calvert的另一篇文章就在这里.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有