csharp进阶练习题:重构出一个switch语句的解释【难度:2级】:
团
这个习题的目的是重构了switch语句,并用字典"跳转表"代替
问题
尽管switch语句可以快速执行,是一个简单的结构,以掌握他们可以成为笨拙因为他们要增加维护的噩梦.
此外,他们不会轻易鼓励"打开关闭"的原则.考虑到这一点,我们会从代码中删除switch叙述,用它可以像一个"跳转表"中使用的辞典更换.
解决方案
您的解决方案将与到字典的呼叫替换GetStatusDescription()
方法的开关case
statment.该词典将被宣布为beloww:
私人只读字典<状态,串> _statusDescriptions;
其中Status
如下列举:
公共枚举状态
{
默认值= 0,
新= 1,
活动= 2,
停用= 3
}
注意:
是的测试将通过无为和离开开关... case
构造存在,但这种习题的想法是给你的洞察你的代码删除`之开关语句和寻找替代构造,在此情况下,一本字典.
请享用.
附:如果你喜欢这个习题然后选择"使用多态重构出一个switch语句"是一个类似的静脉.
编程目标:
using System;
public class Kata
{
private readonly Status _status;
public Kata()
{
}
public Kata(Status status)
{
_status = status;
public string GetStatusDescription()
{
switch (_status)
{
case Status.Default:
return "I have never been set";
22
测试样例:
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Reflection;
[TestFixture]
public class ExampleTestCases
{
{
Assert.AreEqual("I have never been set", new Kata().GetStatusDescription());
Assert.AreEqual("I am new!", new Kata(Status.New).GetStatusDescription());
Assert.AreEqual("I am active", new Kata(Status.Active).GetStatusDescription());
Assert.AreEqual("I have been deactivated", new Kata(Status.Deactivated).GetStatusDescription());
}
17
最佳答案(多种解法):
更多关联题目:
免责申明
本博客所有编程题目及答案均收集自互联网,主要用于供网友学习参考,如有侵犯你的权益请联系管理员及时删除,谢谢
题目收集至https://www.codewars.com/
https://www.codewars.com/kata/refactor-out-a-switch-statement-to-a-dictionary