具有IEnumerable <lazy <t,t>&gt;的Yield运算符

时间:2015-11-19 14:55:31

标签: c# ienumerable yield

为什么两种方法在编译时都失败了?

  

错误1的身体   'TestMethod的(System.Collections.Generic.IEnumerable&GT)'   不能成为迭代器块因为   '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 { } }
<!-->

我想使用其中一种方法使用get访问器来填充我的ObservableCollection属性。

1 个答案:

答案 0 :(得分:0)

yield return之后,您应该指定一个元素并在方法中重复调用它以使其返回多个元素。该方法应返回IEnumerable<IBusinessPluginMetadata>

在第一种情况下,将退货类型更改为IEnumerable<IBusinessPluginMetadata>,您就可以了。

在你的第二种情况下,Select已经返回一个迭代器,只需返回它。