C#:我如何确定接口变量的类型?

Abe*_*Abe 1 c# casting type-conversion

我有一个接口变量IAction nextAction.

我想看看nextAction是否具体实现,但是当我尝试以下操作时失败:

IAction nextAction = GetNextAction();

if (nextAction.GetType() != typeof(LastAction)) {
 // do something...
}
Run Code Online (Sandbox Code Playgroud)

关于如何确定IAction变量nextAction的具体类型的任何想法?

Jai*_*res 5

我相信"是"就是你要找的东西.一般来说:

if (nextAction is ButtonClickedAction) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

在第二次检查时,看起来您正在尝试查看操作是否已更改

private void DetermineIfActionChanged(IAction lastAction)
{
   IAction nextAction = GetNextAction();
   if (nextAction.GetType() != lastAction.GetType())
   {
       DoSomethingAwesome();
   }
}
Run Code Online (Sandbox Code Playgroud)

这种方法的唯一问题是,如果你有某种类型的继承你想要尊重并且你不关心完全匹配(例如,自从ClickAventArg派生自EventArg以来,EventArg与ClickEventArg都被认为是相同的类型).如果是这种情况,这个SO答案可能会有所帮助.