如何在具有当前case语句值的switch-case条件中跳转到另一个case语句?
是否有可能使用switch case实现这种事情,还是有其他方法来实现它?
有可能实现吗?如果没有,那么还有另一种方法可以实现吗?
答案 0 :(得分:3)
此代码有效:
switch (this.Name)
{
case "":
if (this.Owner == null)
{
goto DoBill;
}
break;
case "Bill":
DoBill:
break;
}
然而,任何真正做到这一点的人都应该被枪杀。或至少非常严肃地谈过。为什么不做一些明智的事呢?
switch (param.Component.Type)
{
case "Combo":
returnComboItemSelect = generateCB(param);
if(returnComboItemSelect=="Slider")
{
returnSomething = generateSl(param,returnComboItemSelect); //I mean no need to jump
}
break;
case "List":
returnSomething = generateL(param);
break;
case "Slider":
returnSomething
.....
说真的,如果你开始在case语句之间跳转,那么你就不应该使用它们。我也不太热衷于上面的代码(重复,但有时......)
答案 1 :(得分:2)
你可以在switch语句中循环一段时间,并在完成后退出循环。
var keepLooping = true;
var switchCaseSwitch = param.Component.Type;
while(keepLooping)
{
switch (switchCaseSwitch)
{
case "Combo":
returnComboItemSelect = generateCB(param);
if (returnComboItemSelect == "Slider")
{
switchCaseSwitch = "Slider";
}
else
{
keepLooping = false;
}
break;
case "List":
returnSomething = generateL(param);
keepLooping = false;
break;
case "Slider":
returnSomething = generateSl(param,1);
keepLooping = false;
break;
case "RadioButtons":
returnSomething = generateRB(param);
keepLooping = false;
break;
case "CheckBox":
returnSomething = generateCHB(param,flag);
keepLooping = false;
break;
default:
throw new Exception("Unknown component type");
}
}
答案 2 :(得分:1)
我认为你重新考虑你的架构会更好。
除非他们试图打破嵌套循环,否则人们不会在C#中使用GOTO。
for example
foreach(var item in items){
foreach(var name in item.people){
if(name == WhatIAmSearchingFor)
goto found;
}
}
found:
//Your Code
像返回Func这样简单的东西,以及params的属性包是一种更清晰的方法。或者就像我在下面的示例中所做的那样,只需执行您的第一个参数,然后执行某种枚举或标记。而不是传递一个空的只是使它0
这是S.O.回答如何执行此操作Can a C# method return a method?
所以在你的例子中你可能会这样做
public Func<ParamType,int> YourMethodName{
YourSwitch{
case(1)
return YourClassName.YourMethod;
break;
case(2)
return YourClassName.YourMethod2;
break
case(3)
return YourClassName.YourMethod3;
break
}
}
答案 3 :(得分:1)
或者你可以抛弃案例陈述并做类似的事情:
//Setup
var selector = new Dictionary<string, Func<Param, string, string>>();
selector.Add("Combo", (p, flag) =>
{
var returnComboItemSelect = generateCB(p);
if (returnComboItemSelect == "Slider")
{
return selector["Slider"](p, returnComboItemSelect);
}
return returnComboItemSelect;
});
selector.Add("List", (p, flag) => { return generateL(p); });
selector.Add("Slider", (p, flag) => { return generateSL(p, flag); });
selector.Add("RadioButtons", (p, flag) => { return generateRB(p); });
selector.Add("CheckBox", (p, flag) => { return generateCHB(p, flag); });
//use
var result = selector[param.Component.Type](param, flag);