有什么办法可以避免使用三元运算符吗?
Is there any way to avoid use of Ternary Operator?
User.UserRoleID == 9 ? false : true
假设这是我的情况,它现在正在使用三元运算符。
有人可以建议除 If
之外的其他方法吗
转过来对比一下:
bool b = User.UserRoleID != 9;
Patrick Hofman 的 非常适合 OP 案例,因为它非常具体 返回 true/false。对于更一般的情况,if 是要走的路:
User.UserRoleID == 9 ? doOneStuff() : doTheOtherStuff()
可以很容易地用等效的 if/else
代替
if(User.UserRoleID == 9){
doOneStuff();
}else{
doTheOtherStuff();
}
在赋值和returns的情况下,你需要在两个分支中表达左边的部分:
int foo = (User.UserRoleID == 9) ? doOneStuff() : doTheOtherStuff()
if(User.UserRoleID == 9){
int foo = doOneStuff();
}else{
int foo = doTheOtherStuff();
}
如果这个三元组是一个参数,你需要明确地将它提取到一个变量中:
int result = myFunction(User.UserRoleID == 9 ? 4 : 5)
int parameter;
if(User.UserRoleID == 9){
parameter = 4;
}else{
parameter = 5;
}
result = myFunction(parameter);
;但是如果出于任何原因你不能让自己使用那个农民 if 语句 (??),你 可以 使用 开关.
return (User.UserRoleID == 9) ? false : true
switch(User.UserRoleID == 9){
case true:
return true;
case false:
return false;
default:
//return... wait, what?
throw new Exception("Boolean math broken. Please, restart the universe");
}
对于更一般的情况:
return (User.UserRoleID == 9) ? doOneThing(): doTheOtherThing();
switch(User.UserRoleID == 9){
case true:
return doOneThing();
case false:
return doTheOtherThing();
}
有些人不喜欢这种切换方法。好吧,你也可以 试试另一个:
try {
bool result = User.UserRoleID == 9;
throw new Activator.CreateInstance(result.ToString() + "Exception");
} catch (TrueException e){
return doOneThing();
}catch(FalseException e){
return doTheOtherThing();
}
Note: PLEASE, DON'T DO ANY OF THIS. You can do this, but it is horrible and you'll be despised (and probably fired) if they see this code. Ye be warned
仅使用 User.UserRoleID == 9
代替 true
或 false
文字怎么样?如果这最终会在整个代码中重复,则不理想,但如果您只需要一次或两次...
User.UserRoleID == 9 ? false : true
假设这是我的情况,它现在正在使用三元运算符。
有人可以建议除 If
转过来对比一下:
bool b = User.UserRoleID != 9;
Patrick Hofman 的
User.UserRoleID == 9 ? doOneStuff() : doTheOtherStuff()
可以很容易地用等效的 if/else
代替if(User.UserRoleID == 9){
doOneStuff();
}else{
doTheOtherStuff();
}
在赋值和returns的情况下,你需要在两个分支中表达左边的部分:
int foo = (User.UserRoleID == 9) ? doOneStuff() : doTheOtherStuff()
if(User.UserRoleID == 9){
int foo = doOneStuff();
}else{
int foo = doTheOtherStuff();
}
如果这个三元组是一个参数,你需要明确地将它提取到一个变量中:
int result = myFunction(User.UserRoleID == 9 ? 4 : 5)
int parameter;
if(User.UserRoleID == 9){
parameter = 4;
}else{
parameter = 5;
}
result = myFunction(parameter);
return (User.UserRoleID == 9) ? false : true
switch(User.UserRoleID == 9){
case true:
return true;
case false:
return false;
default:
//return... wait, what?
throw new Exception("Boolean math broken. Please, restart the universe");
}
对于更一般的情况:
return (User.UserRoleID == 9) ? doOneThing(): doTheOtherThing();
switch(User.UserRoleID == 9){
case true:
return doOneThing();
case false:
return doTheOtherThing();
}
有些人不喜欢这种切换方法。好吧,你也可以 试试另一个:
try {
bool result = User.UserRoleID == 9;
throw new Activator.CreateInstance(result.ToString() + "Exception");
} catch (TrueException e){
return doOneThing();
}catch(FalseException e){
return doTheOtherThing();
}
Note: PLEASE, DON'T DO ANY OF THIS. You can do this, but it is horrible and you'll be despised (and probably fired) if they see this code. Ye be warned
仅使用 User.UserRoleID == 9
代替 true
或 false
文字怎么样?如果这最终会在整个代码中重复,则不理想,但如果您只需要一次或两次...