我们ItemInfo
在megaItems中有 4 个:
IEnumerable<ItemInfo> megaItems;
在执行以下任一行之后,我们有 0 ItemInfo
s
var array = megaItems.ToArray();
//var array = megaItems.Cast<ItemInfo>().ToArray();
return array;
如何以正确的方式进行这种转换?
我们ItemInfo
在megaItems中有 4 个:
IEnumerable<ItemInfo> megaItems;
在执行以下任一行之后,我们有 0 ItemInfo
s
var array = megaItems.ToArray();
//var array = megaItems.Cast<ItemInfo>().ToArray();
return array;
如何以正确的方式进行这种转换?
Cast(与 OfType 不同)不会删除项目 - 所以我们可以假设不是这样。我的猜测是,“大型项目”实际上在后续迭代期间报告了不同的结果(很有可能;从您的链接中,也许迭代它们会导致它们被加载 - 因此不再未加载)。我猜如果我们这样做:
var x = megaItems.ToArray();
var y = megaItems.ToArray();
那么(我的猜测)x 的长度为 4,y 的长度为 0。如果是这种情况,那么只需避免读取两次,或者第一次缓冲输出。
覆盖GetHashCode()
和Equals(object obj)
类 ItemInfo
可以解决问题
该数组很可能不是空的。尝试使用这些项目而不是快速查看。这是来自MSDN的引用
该方法是通过使用延迟执行来实现的。立即返回值是一个存储执行操作所需的所有信息的对象。在通过直接调用其 GetEnumerator 方法或使用 Visual C# 中的 foreach 或 Visual Basic 中的 For Each 枚举对象之前,不会执行此方法表示的查询。