有什么办法可以避免使用三元运算符吗?

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 代替 truefalse 文字怎么样?如果这最终会在整个代码中重复,则不理想,但如果您只需要一次或两次...