问题描述
大神帮忙看一下以下的两处代码有什么区别,一个是自己写的,一个是老师写的。------------------------------下面是自己写的-------------------------------------------Console.WriteLine("请选择QQ在线状态,0-4均可输入");stringinput=Console.ReadLine();QQStates=(QQState)Enum.Parse(typeof(QQState),input);Console.WriteLine("您的QQ是{0}状态",s);Console.ReadKey();------------------------------下面是老师写的------------------------------------------Console.WriteLine("请选择QQ在线状态,0-4均可输入");stringinput=Console.ReadLine();switch(input){case"0":QQStates0=(QQState)Enum.Parse(typeof(QQState),input);Console.WriteLine("您的QQ状态是{0}",s0);break;case"1":QQStates1=(QQState)Enum.Parse(typeof(QQState),input);Console.WriteLine("您的QQ状态是{0}",s1);break;case"2":QQStates2=(QQState)Enum.Parse(typeof(QQState),input);Console.WriteLine("您的QQ状态是{0}",s2);break;case"3":QQStates3=(QQState)Enum.Parse(typeof(QQState),input);Console.WriteLine("您的QQ状态是{0}",s3);break;case"4":QQStates4=(QQState)Enum.Parse(typeof(QQState),input);Console.WriteLine("您的QQ状态是{0}",s4);break;}Console.ReadKey();--------------------------实现的效果是一样的啊?为什么老师这样写?-------------------------------------------菜鸟一枚,怕有什么想不到的,所以问一下大神--------------
解决方案
解决方案二:
既然代码可以参数化(5处代码用参数取代取代之后都一样),那么自然是你写的是很好的,老师写的很糟。一般来说,编程讲究“只写一遍代码”。这样的代码具有高级一点的抽象功能,当将来维护时,也容易一次性更新维护。你老师把代码写成那样,我想不出来解释原因。请你自己去问他。如果硬要解释,只能说“老师最初也没有想好,后来则懒得重构代码”了。
解决方案三:
老师一下子写许多代码,显得很有学问的样子只要你验证一下input的确是在0到4之间(if(input>="0"&&input<="4")...)自然你的代码是好的
解决方案四:
你的写法不在枚举范围时会报错,其实老师写例子一般都为了让大部分学生都能理解,不一定最好,但一般容易被学生接受,你能更进一步当然最好,但其他学生不一定也能做到这步
解决方案五:
你输入5的时候就不一样了
解决方案六:
引用4楼shingoscar的回复:
你输入5的时候就不一样了
嗯!谢谢提醒!
解决方案七:
你的代码看起来简洁些,再验证下input是否是在允许的范围内(0-4)就很好了。
解决方案八:
引用2楼xuzuning的回复:
老师一下子写许多代码,显得很有学问的样子只要你验证一下input的确是在0到4之间(if(input>="0"&&input<="4")...)自然你的代码是好的
input接收的是string类型,如果不转换成int类型,直接的input>="0"&&input<="4"好像不行吧?