在其他.NET语言(如C#)中,您可以打开字符串值:
string val = GetVal();
switch(val)
{
case "val1":
DoSomething();
break;
case "val2":
default:
DoSomethingElse();
break;
}
Run Code Online (Sandbox Code Playgroud)
在C++/CLI中似乎不是这种情况
System::String ^val = GetVal();
switch(val) // Compile error
{
// Snip
}
Run Code Online (Sandbox Code Playgroud)
是否有一个特殊的关键字或其他方式使其适用于C++/CLI,就像在C#中一样?
我的好友说,为了效率,他试图用尽可能少的if/else语句进行编程.当我问他为什么说如果/其他人占用该计划资源的一个重要部分时,他就试图远离他们.
他是对的吗?有没有更好的方法来执行if/else样式代码而不实际使用该结构?开关/箱体结构是否更好?
编辑:他不是指一种特定的语言,而是更多的一般做法.以及UNIX/Linux和Windows平台.
我想知道是否有办法声明大量的case语句而不必编写所有的语句.例如,我的代码:
switch (Weight)
{
case 0 to 2;
ShippingCost = "3.69";
case 3 to 4;
ShippingCost = "4.86";
case 5 to 6;
ShippingCost = "5.63";
case 7 to 8;
ShippingCost = "5.98";
case 9 to 10;
ShippingCost = "6.28";
case 11 to 30;
ShippingCost = "15.72";
}
Run Code Online (Sandbox Code Playgroud)
我开始将VB转换为C#,并意识到为了拥有多个case语句,你必须声明它们.你可以看到我有11到30而且不想拥有所有这些线条.
作为一个例子,在开始时有很多ifs 和很多else if在一个之后if。我在下面添加了一些伪代码。
if (x=1)
print x;
if (x=2)
print x;
if (x=3)
print x;
Run Code Online (Sandbox Code Playgroud)
或者
if (x=1)
print x;
else if (x=2)
print x;
else if (x=3)
print x;
Run Code Online (Sandbox Code Playgroud) 我最近开始维护一个成熟的产品,并且在整个过程中我看到像这样使用 switch 语句:
switch (true)
{
case true when object.firstBoolValue:
// do something
break;
case true when object.secondBoolValue:
// do something
break;
case true when object.thirdBoolValue:
// do something
break;
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我更愿意这样写:
if (object.firstBoolValue)
// do something
return;
if (object.secondBoolValue)
// do something
return;
if (object.thirdBoolValue)
// do something
return;
// do default
return;
Run Code Online (Sandbox Code Playgroud)
主要问题:哪个更有利于可读性?次要问题:哪种设计(如果有)性能更好?