gpt4 book ai didi

c# - 对于不同的 mscorlib 版本,无法将 IEnumerable 转换为 IEnumerable

转载 作者:太空宇宙 更新时间:2023-11-03 20:16:37 27 4
gpt4 key购买 nike

我搞乱了一些通用类,其中我有一个集合类,它包含一个从 DTO 集合加载对象的方法,使用 Func 获取子对象。

    public void LoadCollection<C, D>(IEnumerable<D> dtos, Func<D, C> fetch)
where D : class
{
foreach (var dto in dtos)
this.Add(fetch(dto)); // Can't assign a C to a C??
}

(C 受类 def 约束)

其他一切正常 - 但我收到无法将 C 转换为 C 的消息。如果我删除 this.Add并调试,在获取后检查类型;它返回一个 C(item is C = true),试图将其添加到列表中,但会抛出无效参数,即使列表上的约束就在那个 C 上。

正在尝试使用 this.AddRange引用 IEnumerable<T> v4.0.0.0 也不起作用不能分配给 IEnumerable<T> 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);
}
}

请注意,MyCollectionAdd 都声明了一个名为C 的类型参数。即使没有调用 Add,这也会导致这样的警告:

Test.cs(8,21): warning CS0693: Type parameter 'C' has the same name as the type
parameter from outer type 'MyCollection<C>'
Test.cs(4,20): (Location of symbol related to previous warning)

Add 调用会出现如下错误:

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# 中的警告很少见,您几乎应该总是拥有无警告的代码。

关于c# - 对于不同的 mscorlib 版本,无法将 IEnumerable<T> 转换为 IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16275649/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com