如何在switch-case条件语句中使用当前case语句的值跳转到另一个case语句?
是否可以使用switch case实现此类功能,或者是否有其他方法来实现它?
能否实现此功能?如果不能,那么是否有其他方法可以实现它?
如何在switch-case条件语句中使用当前case语句的值跳转到另一个case语句?
是否可以使用switch case实现此类功能,或者是否有其他方法来实现它?
能否实现此功能?如果不能,那么是否有其他方法可以实现它?
这段代码是有效的:
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
.....
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");
}
}
你可以使用goto case。
常见的用例是当你想让一个case运行到下一个case时。
switch ( arg )
{
case "-file":
if ( (i + 1) < args.Length && !args[i + 1].StartsWith("-") )
inputBox.Text = args[++i];
break;
case "-language":
_loadSelectedLanguagesAsALanguageSet = true;
goto case "-select";
case "-select":
if ( (i + 1) < args.Length && !args[i + 1].StartsWith("-") )
_loadSelectedLanguageFileOnStartup = args[++i];
break;
}
我认为重新思考你的架构会更好。
如今,人们不倾向于在C#中使用GOTO,除非他们试图打破嵌套循环。
for example
foreach(var item in items){
foreach(var name in item.people){
if(name == WhatIAmSearchingFor)
goto found;
}
}
found:
//Your Code
将一个Func和一组参数的属性包返回是更清晰的方法。或者像下面的示例中所示,只需使用第一个参数,然后使用某种枚举或标志。而不是传递一个空值,只需将其设置为0。
这里有一个关于如何实现这个功能的S.O.答案 C#方法能够返回另一个方法吗?
所以在你的例子中,你可以这样做
public Func<ParamType,int> YourMethodName{
YourSwitch{
case(1)
return YourClassName.YourMethod;
break;
case(2)
return YourClassName.YourMethod2;
break
case(3)
return YourClassName.YourMethod3;
break
}
}
或者你可以放弃使用 case 语句,尝试像这样做:
//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);
case Combo
,并且如果需要,根据if
语句跳转到case Slider
。 - TyCobb