Рассмотрим следующее:
IEnumerable<ShellTile> pinnedtiles = ShellTile.ActiveTiles;
Console.WriteLine(pinnedtiles.Count());
Console.WriteLine(pinnedtiles.Count());
Если у вас больше 0 ActiveTiles, первый вызов Count () вернет правильное значение, а второй вызов вернет 0.
Если вы не устанавливаете ShellTile.ActiveTiles в локальную переменную, она работает нормально. Я предполагаю, что это потому, что ActiveTiles на самом деле является экземпляром внутреннего класса ShellTileEnumerator и по какой-то причине при доступе через интерфейс IEnumerable он действует как перечислитель только для пересылки. Похоже на вероятную «ошибку», или я что-то неправильно понимаю?