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

时间:2013-02-24 13:20:50

标签: c# generics collections

我们在 megaItems 中有4个ItemInfo

IEnumerable<ItemInfo> megaItems;

在执行以下某行之后,我们有0 ItemInfo s

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

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

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

覆盖GetHashCode()类的Equals(object obj)ItemInfo可能会解决问题

答案 2 :(得分:0)

数组很可能不是空的。尝试使用这些项目而不是快速观看。以下是MSDN

的引用
  

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