将IEnumerable转换为数组会导致空数组

本文关键字:数组 转换 IEnumerable | 更新日期: 2023-09-27 18:01:04

我们在megaItems:中有4个ItemInfo

IEnumerable<ItemInfo> megaItems;

在完成下面的一行之后,我们有0个ItemInfo

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

如何正确地进行转换?

将IEnumerable转换为数组会导致空数组

Cast(与OfType不同(不会删除项,所以我们可能会认为不是这样。我的猜测是,"巨型项目"实际上在随后的迭代中报告了不同的结果(很有可能;从您的链接来看,迭代它们可能会导致它们加载,因此不再是未加载的(。我想如果我们这样做:

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

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

覆盖ItemInfo类的GetHashCode()Equals(object obj)可以解决

问题

数组很可能不是空的。尝试使用这些项目,而不是在快速监视中查找。这是MSDN 的报价

此方法是通过使用延迟执行来实现的。立即return value是一个对象,用于存储需要执行操作。此方法表示的查询直到通过调用其GetEnumerator方法,或者在Visual C#或For中使用foreach每个都在Visual Basic中。