Почему оба метода не работают во время компиляции?Оператор вывода с IEnumerable <Lazy<T,T>>
Ошибка 1 Тело 'TestMethod (System.Collections.Generic.IEnumerable>)' не может быть итератор блока, потому что 'Core.Interfaces.IBusinessPluginMetadata' не итератор интерфейса типа ...
IBusinessPluginMetadata TestMethod(IEnumerable<Lazy<IBusinessPlugin, IBusinessPluginMetadata>> plugins)
{
foreach (Lazy<IBusinessPlugin, IBusinessPluginMetadata> plugin in plugins)
{
yield return (IBusinessPluginMetadata)plugin.Metadata;
}
}
IBusinessPluginMetadata TestMethod(IEnumerable<Lazy<IBusinessPlugin, IBusinessPluginMetadata>> plugins)
{
yield return plugins.Select(a => a.Metadata);
}
<!-- language: c# -->
public virtual ObservableCollection<IBusinessPluginMetadata> PluginsMetadata { get { } }
<!-->
Я бы литий ke, чтобы заполнить мое свойство ObservableCollection, используя get accessor с одним из этих методов.
Вы можете использовать 'yield' только если вы возвращаете' IEnumerable ',' IEnumerable', 'IEnumerator ' или 'IEnumerator'. Из [документации] (https://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx) –
juharr
Если 'Enumerable.Select' возвращает итератор, как вы ожидаете, что метод возвращает' IBusinessPluginMetadata'? –
Также не должно быть необходимости бросать 'Метаданные', поскольку это уже тип' IBusinessPluginMetadata'. – juharr