我有一个大的IEnumerable,我想分成几个。
// I want to do this
public A Method1(B b)
{
return Method2(b);
}
好的我的代码 //应委托工作的切换器方法
public IEnumerable<BufTrade> Split(BufTrade bufRecord)
{
switch(someFlag)
{
case "A":
// does not compile
return Impl1(bufTrade);
// does not compile
yield return Impl1(bufTrade);
}
}
// implements for type A
public IEnumerable<BufTrade> Impl1(BufTrade bufRecord)
{
yield return trade1;
yield return trade2;
// etc
}
答案 0 :(得分:1)
有点不清楚你要做什么,但是由于Impl1
返回IEnumerable<BufTrade>
而Split
也返回相同的内容,你需要从{{循环返回的值每个Impl1
和Split
中的1}}:
yield return
这是一个相当尴尬的代码,但如果你想在这种情况下使用// in Split:
foreach (var i in Impl1(bufRecord))
{
yield return i;
}
,那就是你需要做的。换句话说,您希望yield return
成为枚举函数。
你的尝试只是:
Split
不能使用(使用您提供的代码),因为并非所有路径都返回值。另请注意,您无法混合return Impl1(bufTrade);
和yield return
。你有一个使用return
的枚举器函数,或者你有一个只使用yield return
的常规函数