2011-12-09 66 views
2

考慮以下幾點:爲什麼ShellTile.ActiveTiles.Count()在隨後的調用中返回不同的結果?

 IEnumerable<ShellTile> pinnedtiles = ShellTile.ActiveTiles; 
     Console.WriteLine(pinnedtiles.Count()); 
     Console.WriteLine(pinnedtiles.Count()); 

假設你有一個以上0 ActiveTiles,第一次調用COUNT()將返回正確的值,但第二次調用將返回0

如果你不設置ShellTile.ActiveTiles爲一個局部變量,它工作正常。我認爲這是因爲ActiveTiles實際上是內部類ShellTileEnumerator的一個實例,並且由於某種原因,當通過IEnumerable接口訪問時,它的行爲就像一個僅向前的枚舉器。看起來像一個可能的「陷阱」,或者我誤解了一些東西?

回答

1

是的,你是對的

MessageBox.Show(ShellTile.ActiveTiles.Count().ToString()); 
    MessageBox.Show(ShellTile.ActiveTiles.Count().ToString()); 

以上一會的工夫,但不是當你分配給IEnumeable .... :)

另一種簡單的方法是給它分配TOA列表,而不是IEnumerable的。此作品太

List<ShellTile> pinnedtiles = ShellTile.ActiveTiles.ToList(); ; 
MessageBox.Show(pinnedtiles.Count().ToString()); 
MessageBox.Show(pinnedtiles.Count().ToString()); 
相關問題