Рассмотрим этот бит обфускации кода. Цель состоит в том, чтобы создать новый объект "на лету" через анонимный конструктор и yield return
его. Цель состоит в том, чтобы избежать необходимости поддерживать локальную коллекцию только для просто return
.
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
};
}
}
К сожалению, этот бит кода создает исключение:
Ошибка 28 Тело "Foo.BuildComputerAssets()" не может быть блоком итератора, потому что "System.Collections.Generic.List" не является типом интерфейса итератора
Вопросы
- Что означает это сообщение об ошибке?
- Как я могу избежать этой ошибки и правильно использовать
yield return
?