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

但问题是我最终写了一个 Switch case,导致每个命令有 n 个 case。我该如何避免?C#中的代码


例子:


switch ()

{

 case "Open File":

  //do something;

  break;

 case "Change color":

 //do something;

 break;

 .

 .

 .

 case n:

 // do smething;

 break;


}


慕莱坞森
浏览 142回答 1
1回答

杨__羊羊

您可以将每个命令包装在自己的处理程序中,如下所示:public interface ICommandHandler{&nbsp; &nbsp; string HandlesCommand { get; }&nbsp; &nbsp; void Execute();}public class OpenFileCommandHandler : ICommandHandler{&nbsp; &nbsp; public string HandlesCommand => "Open File";&nbsp; &nbsp; public void Execute()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("Open File");&nbsp; &nbsp; }}public class ChangeColorCommandHandler : ICommandHandler{&nbsp; &nbsp; public string HandlesCommand => "Change Color";&nbsp; &nbsp; public void Execute()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("Change color");&nbsp; &nbsp; }}如果你有一个 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){&nbsp; &nbsp; handler.Execute();}这还有一个优点,即您可以在不更改任何现有代码的情况下添加新的命令处理程序。
打开App,查看更多内容
随时随地看视频慕课网APP