C# 在这种情况下,如何避免其他问题
以本守则为例—C# 在这种情况下,如何避免其他问题,c#,java,syntax,C#,Java,Syntax,以本守则为例— if(enable) { if(enableCar) { // do something } else if(enableComputer) { // do something } else if(enableTV) { // do something } else { otherChoice(); } } else { otherChoice(); } // More code here so return isn't
if(enable) {
if(enableCar) {
// do something
} else if(enableComputer) {
// do something
} else if(enableTV) {
// do something
} else {
otherChoice();
}
} else {
otherChoice();
}
// More code here so return isn't possible
我应该如何避免如此多的else
语句,我不能删除if(enable)
,因为carEnable
可以返回true,而enable
本身将是false
我不能使用return,因为下面有更多代码
那么,我应该如何避免如此多的else
语句呢
当然,这只是一个例子:)
谢谢您的要求还没有完全明确,但我认为您的要求需要一个模块
[编辑]:由于后来添加了
Java
的标记,因此您可以使用enum
进行此操作。您也可以尝试使用else if
和一个else
if (enableCar) {
// do something
}
else if (enableComputer) {
// do something
}
else if (enableTV) {
// do something
} else {
otherChoice();
}
您可以创建一个switch语句
if(enable)
{
switch()
{
case enableCar:
// do some code
break;
case enableComputer:
//do some code
break;
}
}
伪代码缺少太多的信息。有时,如果。。。else可以通过使用多态性来避免。看看这条线。阅读这篇文章。实际上,好的结构分析是一种通用的方法,如何摆脱if-else语句,因为结构本身包含一些信息,所以必须根据if-else语句来决定 所以你应该考虑你需要哪些课程,他们有哪些责任和多样性。你的例子太抽象了,所以我不能确切地告诉你应该做什么 例如,你应该考虑命令模式:
然后您可以只使用“commad.do()”命令本身就知道该做什么,因为每个命令都有自己的功能。您可以将选项添加到枚举并将其传递给交换机
public enum EnableOptions
{
enableCar,
enableComputer,
enableTV
}
然后为选项创建一个变量并将其传递给开关:
EnableOptions option = EnableOptions.enableCar;
if(enabled)
{
switch(option)
{
case EnableOptions.enableCar:
//method
break;
case EnableOptions.enableComputer:
// methods
break;
etc... for all of your options
default:
//something
break;
}
}
如果
enable
为真,并且enableCar
和enableComputer
和enableTV
都为假,那么otherChoice()
会运行三次吗?“举个例子”如果enableCar、enableComputer和enableTV都为假,则运行otherChoice代码三次?这三个布尔值是互斥的,或者您可以将这三个值都设置为true?这里应该提到,在Java中,switch对布尔值不起作用。Ur代码显示该方法的结果可能是布尔输出。switch语句将是一个选项。我认为我的解决方案没有问题。但是,它没有说明所使用的语言,因此这可能不适合您所寻找的内容,但可能对其他人有所帮助。我想您是对的。。好的,那么我将关闭/删除此帖子。所以人们不会感到困惑。。。见鬼,我不能关这个,你不必自己关。如果mods认为帖子没有价值,他们会删除它。事实上,我认为这个问题(或者更好的答案)可能对某些人有用。