C# 开关箱中的额外条件(直通?)
我需要在C#中的开关盒中使用一个额外条件。假设我们有几个案例需要做a和B,但是案例4需要C+额外的东西:C# 开关箱中的额外条件(直通?),c#,C#,我需要在C#中的开关盒中使用一个额外条件。假设我们有几个案例需要做a和B,但是案例4需要C+额外的东西: public void myFunction(int value) { switch(value) { case 0: //Stuff A break; case 1: //Stuff B break; case 2:
public void myFunction(int value)
{
switch(value)
{
case 0:
//Stuff A
break;
case 1:
//Stuff B
break;
case 2:
case 3:
case 4:
//Stuff C
//Am I forced to use an If to a special condition of case 4?
if(value == 4)
{
//Extra stuff for case 4
}
break;
}
}
有没有其他不使用If语句的方法呢?我尝试了一种使用goto的解决方案,它确实有效。谢谢你的回答: 请注意,此解决方案仅适用于在执行语句时不需要具体顺序的情况。
例如,如果在本例中,必须在“stuff C”之后执行“Extra stuff”,正确的方法是在案例3中使用If语句。我使用goto尝试了一个解决方案,它确实有效。谢谢你的回答: 请注意,此解决方案仅适用于在执行语句时不需要具体顺序的情况。
例如,如果在本例中,必须在“stuff C”之后执行“Extra stuff”,正确的方法是在案例3中使用If语句。这里有一点奇怪,将本地函数与switch结合起来: 我不建议编写以下代码:
void Main()
{
int value = 4;
switch (value)
{
case 0:
//Stuff A
break;
case 1:
//Stuff B
break;
case 2:
case 3:
common234(); void common234()
{
Console.WriteLine("2-4");
}
break;
case 4:
common234();
Console.WriteLine("only 4");
break;
//another possible cases...
case 5:
//etc
break;
}
}
这里有一点奇怪,将本地功能与开关相结合: 我不建议编写以下代码:
void Main()
{
int value = 4;
switch (value)
{
case 0:
//Stuff A
break;
case 1:
//Stuff B
break;
case 2:
case 3:
common234(); void common234()
{
Console.WriteLine("2-4");
}
break;
case 4:
common234();
Console.WriteLine("only 4");
break;
//another possible cases...
case 5:
//etc
break;
}
}
不确定您正在修复什么问题,但如果您想…提取函数中常见的
内容C
代码,可以使用开关,在情况2和3中使用,在情况4中使用额外的内容使用。不,在C#中没有办法,开关故障是不允许的。顺便说一句,它应该是value==4
,而不是value=4
@patrickhoffman似乎OP希望在这个问题上有一个局部的失误。我不明白为什么在这个问题上会有反对票。这是一个非常合理且清晰的问题,答案并不明显。不确定您正在解决什么问题,但如果您想…提取函数中常见的代码,可以使用开关,在案例2和案例3中使用,在案例4中使用额外的代码。不,在C中没有办法,不允许开关故障。顺便说一句,它应该是value==4
,而不是value=4
@patrickhoffman似乎OP希望在这个问题上有一个局部的失误。我不明白为什么在这个问题上会有反对票。这是一个非常合理和清晰的问题,答案并不明显。我不同意帕特里克的建议,永远不要使用goto
。我们为这种情况添加了“goto case”,因此您应该在这种情况下使用它。也就是说,正如Patrick所建议的,可能有一种方法可以更优雅地编写代码,而不必使用goto
。举个例子:<代码>开关(value){案例0:填充();中断;案例1:填充();中断;案例2:案例3:填充();中断;案例4:填充();;break;…
这比goto case
技术更清楚,但它要求逻辑可以提取到方法。如果这对您有效,那么这是一个非常好的解决方案。您需要验证的唯一部分是,在问题的示例中,2-4的通用代码在ca的特殊情况之前执行se 4,在这段代码中,特例代码首先执行。是的,@eric lippert,如果其他人必须查看代码,那么这种方式更清楚,但在我的情况下,不值得将语句提取到方法中,因为它们只有一行长,我想“关联”这两种情况(字符串与asp页面名称).lasse-vågsæther karlsen,是的,我已经意识到了这一点,并在我的解决方案中添加了一个注释,goto可能不适用于所有情况。如果是一行,那么你担心什么?CTRL-C,CTRL-v,完成。我不同意Patrick的建议,永远不要使用goto
。我们添加了“goto case”正是这种情况,所以这就是你应该使用的情况。正如帕特里克所建议的,可能有一种方法来编写代码更优雅,没有<代码> Goto < /代码>。考虑例如:代码>开关(值){案例0:Studio();中断;案例1:StuffBe();中断;案例2:案例3:StutcU.();();break;…
这比goto case
技术更清楚,但它要求逻辑可以提取到方法。如果这对您有效,那么这是一个非常好的解决方案。您需要验证的唯一部分是,在问题的示例中,2-4的通用代码在ca的特殊情况之前执行se 4,在这段代码中,特例代码首先执行。是的,@eric lippert,如果其他人必须查看代码,那么这种方式更清楚,但在我的情况下,不值得将语句提取到方法中,因为它们只有一行长,我想“关联”这两种情况(字符串与asp页面名称).lasse-vågsæther karlsen,是的,我已经意识到并在我的解决方案中添加了一个注释,goto可能不适用于所有情况。如果是一行,那么你担心什么?CTRL-C,CTRL-v,完成了。遗憾的是(或者,真的,我真的是幸运的),达夫的设备不能用C#写。悲哀的(或者,真的,我真的是幸运的),Duff的设备无法用C#编写。