Рассмотрите этот бит запутанного кода. Цель состоит в том, чтобы создать новый объект «на лету» с помощью анонимного конструктора и yield return
. Цель состоит в том, чтобы избежать необходимости поддерживать местную коллекцию, просто чтобы просто return
.C#: возврат доходности внутри foreach терпит неудачу - тело не может быть блоком итератора
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
?