使用ActionDictionary代替switch语句我只是在看我的一些旧代码(有一些空闲时间),我注意到一个相当冗长的switch语句。多亏了新知识,我将其重构为以下形式:,CreateViewGroupByHour}};您会考虑这种良好做法,还是只是一个超级丰富且不必要的案例?我渴望确保我学习的新技术只是为了它而不是聪明,并且它们确实为代码增加了好处。谢谢。长switch语句是一种典型的味道,并且始终是重构的目标。此处执行的“标准”程序是使用多态替换条件。这是MartinFowler的书Refactoring(11年前的1999年出版)中概述的步骤之一。既然可以很容易地处理像对象这样的函数(例如使用Action),这可能是一个很好的解决方案。不,我不认为你很聪明。如果我想在未来添加另一个选项,我可以很容易地看到需要做什么。根据您的应用程序,您可以避免总是构造一个新的字典对象,而是将其声明为类成员,在首次访问时对其进行初始化并始终返回相同的实例。但是很难说,它是否真的符合你的需求。我的意思是像这个publicclassMyClass{Dictionarydict=null;privateDictionarycreateView{get{if(dict==null){dict=newDictionary(){{"Standard",CreateStudySummaryView},{"ByGroup",CreateStudySummaryByGroupView},{"ByGroup/Time",CreateViewGroupByHour}};}返回字典;}}}编辑从概念的角度来看,我用字典TryGetValue替换longswicth/case是一个很好的解决方案。希望这会有所帮助...这种方法非常好。我用它多于Action。它也适用于过滤器和选择器。类似于:varfilters=newDictionary>(){//...};varquery=entities.Where(过滤器["X"]);如果代码在编写后基本上是静态的,不会有太大变化,那么我会按下一个开关。至少在表面上,您的字典方法很适合根据更多需求变得更加动态。至于使用这种方法用代码替换所有开关,我个人在大多数情况下不会这样做。我的诚实意见是,它只是为了它而聪明,但它仍然很容易维护。在我看来,个人对最佳实践的品味是最重要的因素。另一方面,正如其他人所说,这可能是长switch语句的可行解决方案。然后,类似策略模式的东西也将是支持行为改变的好方法。以上就是C#学习教程:使用Action字典代替switch语句的全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
