Joa*_*nge 0 .net c# collections ienumerable
我希望有一个枚举器/生成器,每当我调用GetNext时,它总会为我提供下一个值?这可能吗?
Examples:
myStringEnumerator.GetNext()
-> returns "Identifier01.xml"
myStringEnumerator.GetNext()
-> returns "Identifier02.xml"
myStringEnumerator.GetNext()
-> returns "Identifier03.xml"
myStringEnumerator.GetNext()
-> returns "Identifier04.xml"
myStringEnumerator.GetNext()
-> returns "Identifier05.xml"
...
evenNumberGenerator.GetNext()
-> returns 0
evenNumberGenerator.GetNext()
-> returns 2
evenNumberGenerator.GetNext()
-> returns 4
evenNumberGenerator.GetNext()
-> returns 6
evenNumberGenerator.GetNext()
-> returns 8
evenNumberGenerator.GetNext()
-> returns 10
...
Run Code Online (Sandbox Code Playgroud)
我不会在一个地方进行迭代,而是在许多地方和非常不同的时间进行迭代.
我该如何以最优雅的方式做到这一点?如果它也快,那也很好.
术语"枚举器"在这里有点误导,因为这是一种具有开始和结束的特定类型的序列.在你的情况下,你不会按照每个说法枚举任何东西,而只是无限期地推进到下一个值.听起来像单身人士的好用:
class NextNumberGenerator
{
private static NextNumberGenerator instance = new NextNumberGenerator();
public static NextNumberGenerator Current
{
get { return instance; }
}
private int currentNumber = 0;
public int GetNext()
{
return ++currentNumber;
}
public int GetNextEven()
{
currentNumber++;
return (currentNumber % 2 == 0) ? currentNumber : ++currentNumber;
}
public int GetNextOdd()
{
currentNumber++;
return (currentNumber % 2 != 0) ? currentNumber : ++currentNumber;
}
}
Run Code Online (Sandbox Code Playgroud)
用作:
int value = NextNumberGenerator.Current.GetNext();
Run Code Online (Sandbox Code Playgroud)
编辑:一些评论者指出,完全有可能使用IEnumerable.但是,我认为这是对IEnumerable的误用,仅仅是因为这种情况和这种情况在某些方面看似相似,但却不一样.使用一个非常具体,有目的的界面,因为它所做的多件事中的一件与你需要的东西相似(不相同)会回来咬你.
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |