请考虑以下事项:
IEnumerable<ShellTile> pinnedtiles = ShellTile.ActiveTiles;
Console.WriteLine(pinnedtiles.Count());
Console.WriteLine(pinnedtiles.Count());
假设您有超过0个ActiveTiles,第一次调用Count()将返回正确的值,但第二次调用将返回0.
如果你没有将ShellTile.ActiveTiles设置为局部变量,它可以正常工作。我假设这是因为ActiveTiles实际上是内部类ShellTileEnumerator的一个实例,并且出于某种原因,当通过IEnumerable接口访问时,它就像一个仅向前的枚举器。好像很可能是'陷阱',还是我误解了什么?
答案 0 :(得分:1)
是的,你是对的
MessageBox.Show(ShellTile.ActiveTiles.Count().ToString());
MessageBox.Show(ShellTile.ActiveTiles.Count().ToString());
上面的那个可以工作,但是当你分配给IEnumeable时不会....:)
另一种简单的方法是将其分配给List而不是IEnumerable。这也有效
List<ShellTile> pinnedtiles = ShellTile.ActiveTiles.ToList(); ;
MessageBox.Show(pinnedtiles.Count().ToString());
MessageBox.Show(pinnedtiles.Count().ToString());