C# 无法为不同的mscorlib版本将IEnumerable转换为IEnumerable

C# 无法为不同的mscorlib版本将IEnumerable转换为IEnumerable,c#,.net,ienumerable,C#,.net,Ienumerable,我正在处理一些泛型类,其中有一个集合类,其中包含一个从DTO集合加载对象的方法,使用Func获取子对象 C限制在def类上 其他一切都很好——但我得到的信息是,我无法将C转换为C。如果我删除this.Add并调试,在获取类型后检查类型;它返回一个C项,即C=true,尝试将该项添加到列表中会抛出无效参数,即使列表上的约束就在该C上 尝试使用this.AddRange也不起作用,引用IEnumerable v4.0.0.0无法分配给IEnumerable v2.0.5.0请注意mscorlib的不

我正在处理一些泛型类,其中有一个集合类,其中包含一个从DTO集合加载对象的方法,使用Func获取子对象

C限制在def类上

其他一切都很好——但我得到的信息是,我无法将C转换为C。如果我删除this.Add并调试,在获取类型后检查类型;它返回一个C项,即C=true,尝试将该项添加到列表中会抛出无效参数,即使列表上的约束就在该C上

尝试使用this.AddRange也不起作用,引用IEnumerable v4.0.0.0无法分配给IEnumerable v2.0.5.0请注意mscorlib的不同版本

有没有一种简单的方法可以找到引用旧mscorlib的内容?还有其他人有这个问题吗?

我怀疑问题是这样的:

class MyCollection<C>
{
    private List<C> list = new List<C>();

    public void Add<C>(C item)
    {
        list.Add(item);
    }
}
Test.cs(10,9): error CS1502: The best overloaded method match for
        'System.Collections.Generic.List<C>.Add(C)' has some invalid arguments
Test.cs(10,18): error CS1503: Argument 1: cannot convert from 'C
        [c:\Users\Jon\Test\Test.cs(4)]' to 'C'
Test.cs(8,21): (Location of symbol related to previous error)
Add调用将出现如下错误:

class MyCollection<C>
{
    private List<C> list = new List<C>();

    public void Add<C>(C item)
    {
        list.Add(item);
    }
}
Test.cs(10,9): error CS1502: The best overloaded method match for
        'System.Collections.Generic.List<C>.Add(C)' has some invalid arguments
Test.cs(10,18): error CS1503: Argument 1: cannot convert from 'C
        [c:\Users\Jon\Test\Test.cs(4)]' to 'C'
Test.cs(8,21): (Location of symbol related to previous error)
这与mscorlib差异无关,这可能还是个问题,也可能不是问题

寓意:注意编译时警告!它们可以为您提供其他错误的线索。C语言中的警告非常罕见,您几乎应该总是有无警告代码。

我怀疑问题是这样的:

class MyCollection<C>
{
    private List<C> list = new List<C>();

    public void Add<C>(C item)
    {
        list.Add(item);
    }
}
Test.cs(10,9): error CS1502: The best overloaded method match for
        'System.Collections.Generic.List<C>.Add(C)' has some invalid arguments
Test.cs(10,18): error CS1503: Argument 1: cannot convert from 'C
        [c:\Users\Jon\Test\Test.cs(4)]' to 'C'
Test.cs(8,21): (Location of symbol related to previous error)
Add调用将出现如下错误:

class MyCollection<C>
{
    private List<C> list = new List<C>();

    public void Add<C>(C item)
    {
        list.Add(item);
    }
}
Test.cs(10,9): error CS1502: The best overloaded method match for
        'System.Collections.Generic.List<C>.Add(C)' has some invalid arguments
Test.cs(10,18): error CS1503: Argument 1: cannot convert from 'C
        [c:\Users\Jon\Test\Test.cs(4)]' to 'C'
Test.cs(8,21): (Location of symbol related to previous error)
这与mscorlib差异无关,这可能还是个问题,也可能不是问题


寓意:注意编译时警告!它们可以为您提供其他错误的线索。C语言中的警告非常罕见,您几乎应该始终拥有无警告代码。

在发布后5秒,始终回答我自己的问题:

意识到我在LoadCollection方法中再次约束了C

更改为此已修复它:

   public void LoadCollection<D>(IEnumerable<D> dtos, Func<D, C> fetch)
        where D : class
    {
        foreach (var dto in dtos)
            this.Add(fetch(dto));
    }

始终在发布后5秒回答我自己的问题:

意识到我在LoadCollection方法中再次约束了C

更改为此已修复它:

   public void LoadCollection<D>(IEnumerable<D> dtos, Func<D, C> fetch)
        where D : class
    {
        foreach (var dto in dtos)
            this.Add(fetch(dto));
    }

2.0.5.0是mscorlib、IIRC的Silverlight/PCL版本。请给我们更多的上下文,关于什么叫它,项目类型,框架版本等等。另外,请给我们更多的上下文,关于声明它的类。它是泛型吗?添加需要什么?2.0.5.0是mscorlib、IIRC的Silverlight/PCL版本。请给我们更多的上下文,关于什么叫它,项目类型,框架版本等等。另外,请给我们更多的上下文,关于声明它的类。它是泛型吗?加起来有什么好处?我不知道是接受我自己的还是你的Jon-似乎只要我按下“提问”按钮,我的大脑就会活跃起来:@Jodrell我确实会在很多时候回答我自己的问题,因为通常只是周一的大脑滞后等等。。。。如果没有其他人给出答案,不说这里是这样的,但我确实在Jon的答案发布的同时发布了答案,那么肯定把答案放在上面比留下好吗?这毕竟是一个学习网站……或者你是在谈论接受自己的答案吗?@GrantThomas好的,是的,但是,它有点问题。如果你问了一个问题,同时又回答了另一个投稿人的问题,你应该感谢他们的努力。当然,假设他们是正确的。在我进一步离题之前…@Jodrell是的,我同意这一点-我的第一个评论是说Jess,我不知道是接受我自己的还是你的Jon-似乎只要我按下“提问”按钮,我的大脑就会启动:@Jodrell我确实会在很多时候回答我自己的问题,因为通常只是大脑滞后的周一等等。。。。如果没有其他人给出答案,不说这里是这样的,但我确实在Jon的答案发布的同时发布了答案,那么肯定把答案放在上面比留下好吗?这毕竟是一个学习网站……或者你是在谈论接受自己的答案吗?@GrantThomas好的,是的,但是,它有点问题。如果你问了一个问题,同时又回答了另一个投稿人的问题,你应该感谢他们的努力。当然,假设他们是正确的。在我进一步离题之前…@Jodrell是的,我同意这一点-我的第一个评论是用jestTry ruber Ducking然后:PTry ruber Ducking然后:P