将 yeild 返回语句组重构为方法



如何将多个收益语句分组到一个方法中?

我有以下代码:

public IEnumerable<IPublisher> RegisterEvents()
{
var url= Settings.wcfUrl;
var publisher = PublisherFactory.Create<IWcfPublisher> (url)
publisher.Register(new object(..));
publisher.Register(new object(..));
yield return publisher;
var url = Settings.webpublisherurl;
var publisher = PublisherFactory.Create<IWebPublisher> (url)
publisher.Register(new object(..));
publisher.Register(new object(..));
yield return publisher;
var url = Settings.webpublisherurl2;
var publisher = PublisherFactory.Create<IWebPublisher2> (url)
publisher.Register(new object(..));
publisher.Register(new object(..));
yield return publisher;
. . .
}

代码变得非常大,我想将一些发布者重构为静态类 EventHelper

public IEnumerable<IPublisher> RegisterEvents()
{
var url= Settings.wcfUrl;
var publisher = PublisherFactory.Create<IWcfPublisher> (url)
publisher.Register(new object(..));
publisher.Register(new object(..));
yield return publisher;
return yield EventHelper.CreateWebApiPublisher() //<-- compiler error
. . .
}

CreateWebApiPublisher()看起来像

public static IEnumerable<IPublisher> CreateWebApiPublisher()
{
var url = Settings.webpublisherurl;
var publisher = PublisherFactory.Create<IWebPublisher>(url)
publisher.Register(new object(..));
publisher.Register(new object(..));
yield return publisher;
var url = Settings.webpublisherurl2;
var publisher = PublisherFactory.Create<IWebPublisher2>(url)
publisher.Register(new object(..));
publisher.Register(new object(..));
yield return publisher;
}

我很困惑如何在RegisterEvents()中使用EventHelper.CreateWebApiPublisher()我不断收到编译器错误:

Error CS0266 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<IPublisher>' to 'IPublisher'...
yield return

一次只能产生一个值。 在收到编译器错误的行中,需要改为循环访问方法的结果,并按顺序yield return它们。

foreach (var p in EventHelper.CreateWebApiPublisher())
yield return p;

将函数的返回类型更改为 IPublisher 而不是可枚举,并且不要在其中大喊大叫。你的函数应该只返回一个,然后你可以发出调用。将任何要求作为参数传入。

最新更新