为了账号安全,请及时绑定邮箱和手机立即绑定

我有 n 个语音命令,它们被转换为字符串,然后根据命令执行

我有 n 个语音命令,它们被转换为字符串,然后根据命令执行

C#
慕莱坞森 2021-11-21 16:00:10
但问题是我最终写了一个 Switch case,导致每个命令有 n 个 case。我该如何避免?C#中的代码例子:switch (){ case "Open File":  //do something;  break; case "Change color": //do something; break; . . . case n: // do smething; break;}
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您可以将每个命令包装在自己的处理程序中,如下所示:


public interface ICommandHandler

{

    string HandlesCommand { get; }

    void Execute();

}


public class OpenFileCommandHandler : ICommandHandler

{

    public string HandlesCommand => "Open File";

    public void Execute()

    {

        Console.WriteLine("Open File");

    }

}


public class ChangeColorCommandHandler : ICommandHandler

{

    public string HandlesCommand => "Change Color";

    public void Execute()

    {

        Console.WriteLine("Change color");

    }

}

如果你有一个 IoC 容器,你通常可以通过请求IEnumerable<ICommandHandler>. 如果您没有 IoC 容器,则可以将所有处理程序放入这样的数组中


private ICommandHandler[] _commandHandlers = {new OpenFileCommandHandler(), new ChangeColorCommandHandler()};

然后你可以找到一个命令的所有处理程序并像这样执行它们


var command = "Open File";

var handlers = _commandHandlers.Where(c => c.HandlesCommand == command);

foreach (var handler in handlers)

{

    handler.Execute();

}

这还有一个优点,即您可以在不更改任何现有代码的情况下添加新的命令处理程序。


查看完整回答
反对 回复 2021-11-21
  • 1 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信