2012-09-29 37 views
0

我有這樣長的if..else的循環。任何人都可以幫助我瞭解「切換案例」對於這個還是「if..else」更好?開關箱或其他如

if (meals == null) 
{ 
    bfast.Hide(); 
    lunch_rb.Hide(); 
    dinner_rb.Hide(); 
} 
else if (meals != null) 
{ 
    if (breakfast != null && lunch == null && dinner == null) 
    { 
     lunch_rb.Hide(); 
     dinner_rb.Hide(); 
    } 
    if (breakfast == null && lunch != null && dinner == null) 
    { 
     bfast.Hide(); 
     dinner_rb.Hide(); 
    } 
    if (breakfast == null && lunch == null && dinner != null) 
    { 
     bfast.Hide(); 
     lunch_rb.Hide(); 
    } 
    if (breakfast != null && lunch != null && dinner == null) 
    { 
     dinner_rb.Hide(); 
    } 
    if (breakfast != null && lunch == null && dinner != null) 
    { 
     lunch_rb.Hide(); 
    } 
    if (lunch != null && breakfast == null && dinner != null) 
    { 
     bfast.Hide(); 
    } 

我開發的Windows CE 5.0的應用程序(如果這能幫助)

+4

東西請大家在今後更理智格式化你的問題的時間。 –

+0

謝謝喬恩。將來會保重:) – saadasharif

回答

6

你可以嘗試這樣的事情,當你有多個變量條件,你將需要表達的傳遞並切換使用,如果作爲下面給出的可能會讓它簡單。

if (breakfast == null) 
     bfast.Hide(); 

if (lunch == null) 
     lunch_rb.Hide(); 

if (dinner == null) 
     dinner_rb.Hide(); 
+0

謝謝阿迪爾,但正如你可以看到我有另一種情況,用戶可能會選擇兩餐。在這種情況下,我不得不添加3個額外的循環。 – saadasharif

+2

如果兩餐被選中然後兩個條件將執行和隱藏兩個單選按鈕 – Adil

+2

@saadasharif:一方面,這裏還有沒有循環。另一方面,請仔細閱讀答案,並研究如果用戶*選擇了兩餐,會發生什麼情況...... –

1

對於這種特殊情況下的if-else是更好,因爲你有複雜的情況,這件事情的switch-case不能做我相信。

+0

好的..謝謝Lonut – saadasharif

+0

不客氣。 –

10

我認爲在這種情況下,更好的解決方案是:

if (breakfast == null) 
    bfast.Hide(); 
if (lunch == null) 
    lunch_rb.Hide(); 
if (dinner == null) 
    dinner_rb.Hide(); 
+1

但是你會得到空引用異常o_0。你怎麼能叫'lunch.Hide()'如果** lunch **爲空?等等... – Dmytro

+1

@DmytroTsiniavsky只是一個錯字:它不是lunch.Hide,但lunch_rb.Hide –

+0

哦,現在我明白了。 – Dmytro

0

對於這個問題,我覺得if...else是不夠好。 switch...case無法處理這樣複雜的情況。隨意使用它。

0

開關箱總是比如果...否則,如果因爲它需要更少的輸入和你的代碼會更容易閱讀和understand.I自己只是使用「否則,如果」當我忘記考試的交換機的風格!

0

ifswitch語句之間的性能水平沒有太大的區別。無論如何,你的代碼是一個混亂的條件。考慮Pigueiras的答案。像

bfast.Hide(); 
lunch_rb.Hide(); 
dinner_rb.Hide(); 
if (meals != null) { 
    if (breakfast != null) 
    bfast.Show(); 
    if (lunch =! null) 
    lunch_rb.Show(); 
    if (dinner =! null) 
    dinner_rb.Show(); 
}