Rozważ ten fragment zaciemnionego kodu. Zamiarem jest stworzenie nowego obiektu w locie za pośrednictwem anonimowego konstruktora i yield return
go. Celem jest uniknięcie konieczności utrzymywania lokalnej kolekcji tylko po to, by ją po prostu return
.C#: zwrot z inwestycji w foreach kończy się niepowodzeniem - ciało nie może być blokiem iteratora
public static List<DesktopComputer> BuildComputerAssets()
{
List<string> idTags = GetComputerIdTags();
foreach (var pcTag in idTags)
{
yield return new DesktopComputer() {AssetTag= pcTag
, Description = "PC " + pcTag
, AcquireDate = DateTime.Now
};
}
}
Niestety, bit kodu powoduje wyjątek:
błąd 28 Ciała 'Foo.BuildComputerAssets()' nie może być blok iteracyjnej, ponieważ 'System.Collections.Generic.List' nie jest to typ interfejsu iterator
pytania
- Co oznacza ten komunikat o błędzie?
- Jak mogę uniknąć tego błędu i prawidłowo używać
yield return
?