在C#中使用switch语句与使用语句的好处/缺点是什么?if/else我无法想象除了你的代码外观之外还有其他重大差异.
是否有任何理由导致生成的IL或相关的运行时性能完全不同?
编译以下代码并得到错误type illegal.
int main()
{
// Compilation error - switch expression of type illegal
switch(std::string("raj"))
{
case"sda":
}
}
Run Code Online (Sandbox Code Playgroud)
你不能在任何一个switch或中使用字符串case.为什么?是否有任何解决方案可以很好地支持类似于切换字符串的逻辑?
通过一个小错字,我意外地发现了这个结构:
int main(void) {
char foo = 'c';
switch(foo)
{
printf("Cant Touch This\n"); // This line is Unreachable
case 'a': printf("A\n"); break;
case 'b': printf("B\n"); break;
case 'c': printf("C\n"); break;
case 'd': printf("D\n"); break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
似乎声明printf的顶部switch是有效的,但也完全无法访问.
我得到了一个干净的编译,甚至没有关于无法访问的代码的警告,但这似乎毫无意义.
编译器是否应将此标记为无法访问的代码?
这有什么用途吗?
Integer i = ...
switch (i){
case null:
doSomething0();
break;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我不能在switch case语句中使用null.我怎么能这样做?我不能使用default因为那时我想做别的事情.
选项1 - 使用return返回:
function myFunction(opt)
{
switch (opt)
{
case 1: return "One";
case 2: return "Two";
case 3: return "Three";
default: return "";
}
}
Run Code Online (Sandbox Code Playgroud)
选项2 - 使用break切换:
function myFunction(opt)
{
var retVal = "";
switch (opt)
{
case 1:
retVal = "One";
break;
case 2:
retVal = "Two";
break;
case 3:
retVal = "Three";
break;
}
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
我知道两者都有效,但又是一种最佳实践吗?我倾向于喜欢选项1 - 使用返回最佳切换,因为它更干净,更简单.
这是我使用@ ic3b3rg评论中提到的技术的具体例子的jsFiddle:
var SFAIC = {};
SFAIC.common =
{
masterPages:
{
cs: "CS_",
cp: "CP_" …Run Code Online (Sandbox Code Playgroud) 在Swift中,您可以使用"is"检查对象的类类型.如何将其合并到"开关"块中?
我认为这是不可能的,所以我想知道最好的方法是什么.
TIA,彼得.
如何为以下条件写一个swtich?
如果网址包含 "foo",则settings.base_url为"bar".
以下是实现所需的效果,但我觉得这在交换机中更易于管理:
var doc_location = document.location.href;
var url_strip = new RegExp("http:\/\/.*\/");
var base_url = url_strip.exec(doc_location)
var base_url_string = base_url[0];
//BASE URL CASES
// LOCAL
if (base_url_string.indexOf('xxx.local') > -1) {
settings = {
"base_url" : "http://xxx.local/"
};
}
// DEV
if (base_url_string.indexOf('xxx.dev.yyy.com') > -1) {
settings = {
"base_url" : "http://xxx.dev.yyy.com/xxx/"
};
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找switch语句的正确语法与Bash中的初级案例(理想情况下不区分大小写).在PHP中我会编程它像:
switch($c) {
case 1:
do_this();
break;
case 2:
case 3:
do_what_you_are_supposed_to_do();
break;
default:
do_nothing();
}
Run Code Online (Sandbox Code Playgroud)
我希望在Bash中也一样:
case "$C" in
"1")
do_this()
;;
"2")
"3")
do_what_you_are_supposed_to_do()
;;
*)
do_nothing();
;;
esac
Run Code Online (Sandbox Code Playgroud)
这在某种程度上是行不通的:do_what_you_are_supposed_to_do()当$ C为2或3时,应该触发函数.
请考虑以下switch声明:
switch( value )
{
case 1:
return 1;
default:
value++;
// fall-through
case 2:
return value * 2;
}
Run Code Online (Sandbox Code Playgroud)
此代码编译,但它对C90/C99有效(=已定义的行为)?我从未见过默认情况不是最后一种情况的代码.
编辑:
正如Jon Cage和KillianDS所写:这是非常丑陋和令人困惑的代码,我很清楚它.我只对一般语法(它定义了吗?)和预期输出感兴趣.
有没有更聪明的方法来重写这个?
if ([cardName isEqualToString:@"Six"]) {
[self setValue:6];
} else if ([cardName isEqualToString:@"Seven"]) {
[self setValue:7];
} else if ([cardName isEqualToString:@"Eight"]) {
[self setValue:8];
} else if ([cardName isEqualToString:@"Nine"]) {
[self setValue:9];
}
Run Code Online (Sandbox Code Playgroud) switch-statement ×10
c ×2
javascript ×2
.net ×1
bash ×1
break ×1
c# ×1
c++ ×1
class ×1
java ×1
objective-c ×1
regex ×1
return ×1
string ×1
swift ×1