the*_*row 2 .net c# ienumerable ienumerator
我有一个定制的集合,里面有许多对象生成模式.
它可以一次生成所有内容,一个对象或一次生成N个对象.
我想有选择在运行时之间切换生成的实现,甚至可能创建新的.
我正在寻找具有这种语法的东西:
foreach(var obj in myCollection.EnumerateAs(new LazyEnumerator())
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
我不知道EnumerateAs()返回什么?我假设它是IEnumerator但它仍然是我的列表的枚举器?
LazyEnumerator是否继承自IEnumerator?
怎么知道myCollection?
您的返回值EnumerateAs()应为IEnumerable<T>,其中T是集合中包含的对象类型.我建议您阅读有关yield return的更多信息,因为这可以帮助您了解枚举的工作原理.没有用于提供枚举"策略"的默认类,但您可以通过以各种方式对底层集合使用yield return来轻松实现此类内容.
从您的问题中不清楚枚举策略如何与您的集合类进行交互.看起来你可能会像以下一样:
public interface IEnumerationStrategy<TCollection, T>
{
IEnumerable<T> Enumerate(TCollection source);
}
public class Quark {}
public class MyCollection
{
public IEnumerable<Quark> EnumerateAs(IEnumerationStrategy<MyCollection, Quark> strategy)
{
return strategy.Enumerate(this);
}
//Various special methods needed to implement stategies go here
}
public class SpecialStrategy : IEnumerationStrategy<MyCollection, Quark>
{
public IEnumerable<Quark> Enumerate(MyCollection source)
{
//Use special methods to do custom enumeration via yield return that depends on specifics of MyCollection
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您也可以使用简单的策略替换策略类Func<MyCollection, IEnumerable<T>>,但上述内容最接近您所需的语法.
| 归档时间: |
|
| 查看次数: |
3470 次 |
| 最近记录: |