有没有办法避免使用三元运算符?

时间:2017-04-05 09:14:06

标签: c# ternary-operator

User.UserRoleID == 9 ? false : true

假设这是我的条件,现在正在使用三元运算符。
有人建议除了If之外的其他一些方法

4 个答案:

答案 0 :(得分:46)

转转比较:

bool b = User.UserRoleID != 9;

答案 1 :(得分:3)

Patrick Hofman的answer非常适合OP案例,因为非常具体返回true / false。对于更一般的情况,如果是要走的路

User.UserRoleID == 9 ? doOneStuff() : doTheOtherStuff()

可以很容易地用等效的if / else

代替
if(User.UserRoleID == 9){
   doOneStuff();
}else{
   doTheOtherStuff();
}

在分配和返回的情况下,您需要在两个分支中表达左侧部分:

 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);

答案 2 :(得分:1)

You should use an if. Seriously;但如果由于任何原因你无法使用那个农民 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();
}
  

注意:请不要做任何此事。你可以这样做,但它太可怕了,如果他们看到这段代码,你会被鄙视(并且可能被解雇)。你应该被警告

答案 3 :(得分:0)

如何仅使用User.UserRoleID == 9代替truefalse文字?如果这最终会在整个代码中重复,那么这并不理想,但如果您只需要一次或两次......