对于ScoreOption
,我希望获得以下输入“A”,“B”和T_(状态),例如T_NY
如何为第三个选项T_(state)编写case switch语句?
switch(ScoreOption.ToUpper().Trim())
{
case "A":
....
break;
case "B":
....
break;
case T_????
....
break;
}
我不妨写一下if-else语句?
答案 0 :(得分:16)
string s = ScoreOption.ToUpper().Trim();
switch(s)
{
case "A":
....
break;
case "B":
....
break;
default:
if (s.StartsWith("T_"))
{
....
}
break;
}
答案 1 :(得分:10)
在switch语句中,不能将变量作为大小写。你必须做像
这样的事情case "T_NY":
case "T_OH":
break;
等
现在你可以做的是
switch (ScoreOption.ToUpper().Trim())
{
case "A":
break;
case "B":
break;
default:
//catch all the T_ items here. provided that you have specifed all other
//scenarios above the default option.
break;
}
答案 2 :(得分:2)
switch(ScoreOption.ToUpper().Substring(0, 1))
{
case "A":
....
break;
case "B":
....
break;
case "T":
ValidateState(ScoreOption);
....
break;
}
但是,是的,一系列if语句可能会更好。无论如何,所有的开关都会产生,因为系统不能对字符串做任何奇特的跳转表技巧。
答案 3 :(得分:1)
您还可以创建一个字典,其中的函数包含值匹配时要运行的代码。
var dict = new Dictionary<string, Action<T,U,V>();
dict.Add("A", (x,y,z) => {
...
});
var func = dict[val];
func(v1,v2,v3);
答案 4 :(得分:0)
分别处理A和B以及切换是最大变量State的决定。喜欢的东西;
char firstCharacter = ScoreOption.ToUpper().CharAt(0);
if(firstCharacter.Equals("A")) {
...
}else if(firstCharacter.Equals("B")) {
...
}else {
switch(ScoreOption.Split("_")[1]) {
case "NY":
...
break;
case "OH":
...
break;
default:
...
break;
}
}