Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无状态库-允许使用SetTriggerParameters<;T>;_C#_.net_State Machine_Stateless State Machine - Fatal编程技术网

C# 无状态库-允许使用SetTriggerParameters<;T>;

C# 无状态库-允许使用SetTriggerParameters<;T>;,c#,.net,state-machine,stateless-state-machine,C#,.net,State Machine,Stateless State Machine,如何将PermitIf与SetTriggerParameters一起使用 在这个例子中,我正在模拟一个电机,它可以前进、后退或关闭(不移动)。向前和向后可以是双速度,因此我需要设置触发器参数。但是,将速度设置为0会关闭电机 我希望不允许在参数为0的情况下触发向前打开或向后打开-我希望关闭触发器明确表示关闭电机的方式。否则,当前状态为向前/向后,但速度为0 这是我得到的错误: CS1503参数1:无法从“UserQuery.Triggers”转换为“无状态.StateMachine.Trigger

如何将
PermitIf
SetTriggerParameters
一起使用

在这个例子中,我正在模拟一个电机,它可以前进、后退或关闭(不移动)。向前和向后可以是
速度,因此我需要
设置触发器参数
。但是,将速度设置为0会关闭电机

我希望不允许在参数为0的情况下触发
向前打开
向后打开
-我希望
关闭
触发器明确表示关闭电机的方式。否则,当前状态为向前/向后,但速度为0

这是我得到的错误:

CS1503参数1:无法从“UserQuery.Triggers”转换为“无状态.StateMachine.TriggerWithParameters”

公共枚举状态
{
关
向前,
向后
}
公共枚举触发器
{
关掉,
转变方向,
倒转,
}
var machine=新状态机(State.Off);
var forwardsTrigger=机器.SetTriggerParameters(触发器.转换转发);
var backwardsTrigger=机器.SetTriggerParameters(Triggers.TurnOnBackwards);
machine.Configure(State.Off)
.PermitIf(Triggers.TurnOnForwards,State.Forwards,(速度)=>speed>0)//错误
.PermitIf(Triggers.TurnOnBackwards,State.Forwards,(速度)=>速度<0)//错误
.许可证(触发器.转换,状态.转换)
.Permit(Triggers.TurnOnBackwards,State.Backwards);
machine.Configure(State.Forwards)
.Permit(Triggers.TurnOnBackwards,State.Backwards)
.许可证(触发、关闭、状态、关闭);
machine.Configure(State.Backwards)
.许可证(触发器.转换,状态.转换)
.许可证(触发、关闭、状态、关闭);
机器。点火(触发器。转向);
机器。点火(触发器。关闭);
机器。点火(触发器。反转);
机器。点火(触发器。关闭);

这可能吗?

您现在可能已经找到了答案,但如果使用参数化触发器,它将编译:

    machine.Configure(State.Off)
        .PermitIf(forwardsTrigger, State.Forwards, (speed) => speed > 0) // no error 
        .PermitIf(backwardsTrigger, State.Forwards, (speed) => speed < 0) // no error
        .Permit(Triggers.TurnOnForwards, State.Forwards)
        .Permit(Triggers.TurnOnBackwards, State.Backwards);
machine.Configure(State.Off)
.PermitIf(forwardsTrigger,State.Forwards,(速度)=>速度>0)//无错误
.PermitIf(后退触发,状态.前进,(速度)=>速度<0)//无错误
.许可证(触发器.转换,状态.转换)
.Permit(Triggers.TurnOnBackwards,State.Backwards);
    machine.Configure(State.Off)
        .PermitIf(forwardsTrigger, State.Forwards, (speed) => speed > 0) // no error 
        .PermitIf(backwardsTrigger, State.Forwards, (speed) => speed < 0) // no error
        .Permit(Triggers.TurnOnForwards, State.Forwards)
        .Permit(Triggers.TurnOnBackwards, State.Backwards);