30个左右的条件是一个开关声明吗?

dea*_*vmc 17 c# parsing

我正处于在.Net中创建MP4标记解析器的最后阶段.对于那些有标记音乐经验的人,您会发现平均有30个左右的标签.如果测试了不同类型的循环,似乎带有Const值的switch语句似乎是关于以二进制方式捕获标记的方法.

这个开关允许我搜索二进制文件,而不需要知道标签的存储顺序,或者是否有一些不存在,但我想知道是否有人会反对使用switch语句来处理这么多条件.

任何见解都非常感谢.

编辑:有人认为我现在应该补充说,在讨论这个函数是递归的时候,我应该提取这个条件并将数据传递给我可以杀死的方法吗?

Mar*_*ers 23

它可能与开关一起正常工作,但我认为你的功能会变得很长.

解决此问题的一种方法是为每个标记类型创建一个处理程序类,然后在字典中使用相应的标记注册每个处理程序.当您需要解析标记时,您可以在字典中查找应该使用哪个处理程序.

  • 我相信他所指的基本上是[战略模式](http://en.wikipedia.org/wiki/Strategy_pattern). (3认同)
  • @Nayan:没有什么可以阻止你在vanilla C中注册针对字符串的函数指针.我无法想象OOP语言提供的任何无法复制的内容. (2认同)

kem*_*002 10

就个人而言,如果必须,我会这样做.switch语句比If/Else语句更容易阅读(并且您的大小将针对您进行优化).

这是一个相关的问题.请注意,接受的答案是错误的答案.

在C#中使用if/else和switch-case之间是否有任何显着差异?


Ham*_*jan 5

另一个选项(Python启发)是一个字典,它将标记映射到lambda函数,或事件,或类似的东西.这需要一些重新架构.

  • 实际上,Lambdas意味着短暂的生命.代表似乎在这里最合适. (2认同)