2

我们ItemInfomegaItems中有 4 个:

IEnumerable<ItemInfo> megaItems;

在执行以下任一行之后,我们有 0 ItemInfos

var array = megaItems.ToArray();
//var array = megaItems.Cast<ItemInfo>().ToArray();
return array;

如何以正确的方式进行这种转换?

4

3 回答 3

4

Cast(与 OfType 不同)不会删除项目 - 所以我们可以假设不是这样。我的猜测是,“大型项目”实际上在后续迭代期间报告了不同的结果(很有可能;从您的链接中,也许迭代它们会导致它们被加载 - 因此不再未加载)。我猜如果我们这样做:

var x = megaItems.ToArray();
var y = megaItems.ToArray();

那么(我的猜测)x 的长度为 4,y 的长度为 0。如果是这种情况,那么只需避免读取两次,或者第一次缓冲输出。

于 2013-02-24T13:37:37.850 回答
1

覆盖GetHashCode()Equals(object obj)ItemInfo可以解决问题

于 2013-02-24T13:46:07.457 回答
0

该数组很可能不是空的。尝试使用这些项目而不是快速查看。这是来自MSDN的引用

该方法是通过使用延迟执行来实现的。立即返回值是一个存储执行操作所需的所有信息的对象。在通过直接调用其 GetEnumerator 方法或使用 Visual C# 中的 foreach 或 Visual Basic 中的 For Each 枚举对象之前,不会执行此方法表示的查询。

于 2013-02-24T13:27:43.740 回答