提问人:Raphael Aracelli 提问时间:9/5/2023 最后编辑:Raphael Aracelli 更新时间:9/5/2023 访问量:70
开关/外壳和 If - 更适合我的情况?[已结束]
Switch/Case and If - Better Solution for my case? [closed]
问:
目前,我需要根据从计算机名称、位置和扇区中获取的 2 个变量自动进行安装和配置。每个位置的每个扇区都有完全不同的配置。
有没有比在每个位置的“开关/案例”中对每个扇区使用“if”更好的方法?(每个位置的扇区数小于位置数)
谢谢!
例:
public void install(string l, string s)
{
switch (l)
{
case "10":
{
if (s == "CS" || s == "BO")
{
//do stuff1
//do stuff2
}
if (s == "RR")
{
//do stuff1
//do stuff2
}
if (s == "RC")
{
//do stuff1
//do stuff2
}
break;
}
case "20":
{
if (s == "CS" || s == "BO")
{
//do stuff1
//do stuff2
}
if (s == "RE")
{
//do stuff1
//do stuff2
//do stuff3
}
if (s == "RC")
{
//do stuff1
//do stuff2
}
break;
}
case "21":
{
if (s == "CS" || s == "BO")
{
//do stuff1
}
if (s == "RE")
{
//do stuff1
//do stuff2
}
if (s == "RX")
{
//do stuff1
//do stuff2
}
break;
}
(...)
}
}
使用 Switch/Case,如果它变得太大而且有点凌乱,我不知道是否有更好的方法让我忘记。
答:
1赞
Levi
9/5/2023
#1
您可以使用 .else if
public void install(string l, string s)
{
switch (l)
{
case "10":
{
if (s == "CS" || s == "BO")
{
// executed only if "condition" is true
}
else if (s == "RR")
{
// executed only if "condition" was false and "other condition" is true
}
else
{
// executed only if both "condition" and "other condition" were false
}
break;
}
}
}
1赞
eloiz
9/5/2023
#2
如果您使用的是 C# 7.0 或更高版本,则可以使用 switch-when 来避免使用 if。
switch (l)
{
case @"10" when s is @"CS" or @"BO":
break;
case @"10" when s is @"RR":
break;
case @"10" when s is @"RC":
break;
case @"20" when s is @"CS" or @"BO":
break;
case @"20" when s is @"RE":
break;
case @"20" when s is @"RC":
break;
case @"21" when s is @"CS" or @"BO":
break;
case @"21" when s is @"RE":
break;
case @"21" when s is @"RX":
break;
}
1赞
Enigmativity
9/5/2023
#3
对于这些情况,我倾向于使用字典方法。
代码要简洁得多。
var stuff = new Dictionary<(string l, string s), Action>()
{
{ ("10", "CS"), () => { Stuff1(); Stuff2(); } },
{ ("10", "BO"), () => { Stuff1(); Stuff2(); } },
{ ("10", "RR"), () => { Stuff1(); Stuff2(); } },
{ ("10", "RC"), () => { Stuff1(); Stuff2(); } },
{ ("20", "CS"), () => { Stuff1(); Stuff2(); } },
{ ("20", "BO"), () => { Stuff1(); Stuff2(); } },
{ ("20", "RE"), () => { Stuff1(); Stuff2(); Stuff3(); } },
{ ("20", "RC"), () => { Stuff1(); Stuff2(); } },
{ ("21", "CS"), () => { Stuff1(); } },
{ ("21", "BO"), () => { Stuff1(); } },
{ ("21", "RE"), () => { Stuff1(); Stuff2(); } },
{ ("21", "RX"), () => { Stuff1(); Stuff2(); } },
};
if (stuff.TryGetValue((l, s), out Action action))
action();
这也允许运行时配置,这是普通开关和 ifs 不允许的。
上一个:数据表和最小值 IF?
评论