2017-04-05 82 views
6
User.UserRoleID == 9 ? false : true 

假設這是我的狀況,它現在使用三元運算符。
可能有人建議比如果有什麼辦法可以避免使用三元運算符?

+5

代碼的上下文是什麼?這是一個返回聲明?還是別的被分配了這個真/假值的東西? –

+5

'if'有什麼問題? – Jodrell

+1

您可以用無代碼替換您的代碼行,它不會執行任何操作。 – Jodrell

回答

45

周圍比較只需打開其他一些其他的方法:

bool b = User.UserRoleID != 9; 
+8

27上傳問題的答案是這樣的問題?令人驚歎的... – LukeG

+0

是的,SO已經瘋狂了,消極的方式。我不介意它是否停止在0 ... @LukeG –

+2

我建議把'User.UserRoleID!= 9'放入缺口,這樣任何你的代碼的讀者都有信心你知道你在做什麼。特別是在你看不到'b'是什麼類型的情況下。 – Szymon

2

帕特里克·霍夫曼的answer是完美的OP的情況下,因爲它是非常專門返回真/假。對於更一般的情況下,如果是去方式:

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

You should use an if. Seriously;但如果由於任何原因你不能自己使用該農民如果聲明(?),你可能使用開關

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

注:請不要做任何這一點。你可以做到這一點,但它是可怕的,如果他們看到這個代碼,你會被鄙視(可能被解僱)。葉被警告

+0

爲什麼downvotes?是因爲這是一種可怕的方式去做任何事情,只是爲了看到它而感到痛苦?它是!它確實! ..但OP不想使用適當的ifs! – xDaizu

+2

一個'switch' ...爲布爾值。對於第三種情況的缺省值...對於布爾值。請使用'if'代替。 – DarkDust

+1

好的,我沒有發現OP正在尋找一個不涉及「if」的解決方案。在這種情況下,這個答案值得投入創造力。 – DarkDust

0

如何只到位truefalse文字的使用User.UserRoleID == 9?如果這最終會在整個代碼中重複出現,那麼這並不理想,但是如果您只需要一次或兩次...

相關問題