我有 c# 应用程序。我有 2 个不同的类(Step1.State和Step2.State)(它们实现了称为IMDP.IState的相同接口),它们代表我的应用程序执行的 2 个不同步骤中的应用程序状态。我有 2 个重载方法来更新应用程序状态。
我的一种方法中有以下代码:
Step1.State s1s = null;
Step2.State s2s = null;
然后我根据其类型投射当前状态。currentState是作为参数接收的已实现接口的实例。首先,我将它存储在动态类型中。
//currentState is instance of IMDP.IState interface which is
//implemented by the two states
dynamic curState=currentState;
if(curState is Step1.State)
{
s1s = (Step1.State)currentState;
curState = s1s;
}
else if (curState is Step2.State)
{
s2as = (Step2.State)currentState;
curState = s2s;
}
然后我在同一个方法中调用我的重载方法。
currentState = myAgent.UserStateUpdate(prevAction, curState, e.Result);
UserStateUpdate方法有 2 个重载版本。第一个获取Step1.State,第二个获取Step2.State作为区分参数。如下所示;
IMDP.IState UserStateUpdate(IMDP.IAction act, Step1.State st, RecogResult rr)
IMDP.IState UserStateUpdate(Step2.Abuse.Action act, Step2.State st, RecogResult rr)
应用程序为Step1.State调用正确的方法,但是当应用程序移动到使用Step2.State表示状态的 Step2 时。它引发以下异常。请注意,当我在调用重载方法之前检查curState中存储的内容(类型为动态)时,我看到的是类型为Step2.State的正确状态。
“ 'BI4A.Agent.Agent.UserStateUpdate(BI4A.IMDP.IAction, BI4A.Step1.State, System.Speech.Recognition.RecognitionResult)' 的最佳重载方法匹配有一些无效参数”
这基本上表明系统尝试调用接受 Step1.State 而不是 Step2.State 的重载方法。我不知道如何让它调用正确的方法。谢谢你的帮助。