gpt4 book ai didi

c# - 这是在滥用 IEnumerator 结构吗?

转载 作者:行者123 更新时间:2023-11-30 17:12:08 24 4
gpt4 key购买 nike

我有一个 Sensor 状态机,我为其编写了 Cycle() 方法:

  /// <summary>
/// Cycle sets the machine to follow a path from one it's current state to the next. The
/// behavior of the sensor is to revert to it's default state should an invalid state be
/// encountered.
/// </summary>
/// <returns></returns>
public IState Cycle() {
if(_currentState.Next.IsNullOrEmpty()) {
_currentState = DefaultState.Set();
} else {
_currentState = _currentState.Cycle();
}
return _currentState;
}

public IEnumerator<IState> Cycle(Func<bool> HasWork) {
while(HasWork()) {
yield return Cycle();
}
}

实现:

  [TestMethod]
public void SensorExperiment_CycleWhileFunc() {
float offset = .5f;
IState previousState = State.Empty;

IStimulus temp = new PassiveStimulus(68f) {
Offset = offset
};
ISensor thermostat = new Sensor(65f, 75f, temp);

int cycles = 0;
// using this func to tell the machine when to turn off
Func<bool> hasWork = () => {
previousState = thermostat.CurrentState;
// run 10 cycles6
return cycles++ < 10;
};

var iterator = thermostat.Cycle(hasWork);

while(iterator.MoveNext()) {
Console.WriteLine("Previous State: {0}\tCurrent State: {1}",
previousState.Name, iterator.Current.Name);
}
}

我已阅读 Eric Lippert's answer使用 IEnumerator 作为 StateMachine 进行查询。 我的实现是否滥用或利用了 IEnumerator?我将我的实现视为提供一系列状态自动化的一种方式。

最佳答案

我不认为这样使用它真的是一种滥用,毕竟你把结果最多当成一个集合。

另一方面,我看不出有什么理由应该在这里使用迭代器。如果您将代码重写为如下所示,它应该可以正常工作。

while (hasWork())
Console.WriteLine("Previous State: {0}\tCurrent State: {1}",
previousState.Name, thermostat.Cycle().Name);

关于c# - 这是在滥用 IEnumerator 结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10970604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com