2016-07-07 148 views
2

我的代碼塊:優化冗餘else語句

if (duplicateVoucherChecker(voucher)) 
{ 
    DialogResult dialogResult = Messages.Question("Podany bon był już użyty na tej stacji", "Uwaga", false); 

    if (dialogResult == DialogResult.No) 
    { 
     ViewTyped.PaymentValueEditor.Focus(); 
    } 
    else if (dialogResult == DialogResult.Yes) 
    { 
     Vouchers.Add(voucher); 
     Payment.OriginalToPay = Payment.ToPay; 
     ViewTyped.PaymentNumberEditor.Focus(); 
     ViewTyped.ChangeEditor.Focus(); 
    } 
} 
else 
{ 
    Vouchers.Add(voucher); 
    Payment.OriginalToPay = Payment.ToPay; 
    ViewTyped.PaymentNumberEditor.Focus(); 
    ViewTyped.ChangeEditor.Focus(); 
} 

我怎樣才能讓這個非冗餘?

我想擺脫第二個else語句,但我仍然想要這個else塊做,如果duplicateVoucherChecker(voucher)返回false

+1

聽起來更適合[codereview.se] – Xan

回答

2

如果對話框未顯示或結果爲是,您可以使用bool來跟蹤,如果它是true,則只執行該邏輯。

bool dialogNotShownOrYesPicked = true; 
if (duplicateVoucherChecker(voucher)) 
{ 
    DialogResult dialogResult = Messages.Question(
     "Podany bon był już użyty na tej stacji", "Uwaga", 
     false); 
    if (dialogResult == DialogResult.No) 
    { 
     ViewTyped.PaymentValueEditor.Focus(); 
    } 
    if (dialogResult != DialogResult.Yes) 
    { 
     dialogNotShownOrYesPicked = false; 
    }  
} 

if(dialogNotShownOrYesPicked) 
{ 
    Vouchers.Add(voucher); 
    Payment.OriginalToPay = Payment.ToPay; 
    ViewTyped.PaymentNumberEditor.Focus(); 
    ViewTyped.ChangeEditor.Focus(); 
} 
+0

這將運行冗餘代碼,如果'DialogResult'不是'No',這是不是原來的代碼做(同Servy答案) –

+0

@艾哈邁德·伊布拉辛你是對的。固定。 – juharr

+0

這不會編譯,你的如果有「dialogShownAndNoPicked」,但你的布爾是「dialogShownAndYesNotPicked」 – Mason11987

0

您可以使用有意義的變量來存儲狀態。如果你有重複的代碼,這也表明你可以創建可重用的方法,f.e. AddVoucher

在這種情況下,你可以使用一個bool變量作爲標誌:

bool duplicateVoucher = duplicateVoucherChecker(voucher); 
bool addVoucher = !duplicateVoucher; 
if(!addVoucher) 
{ 
    DialogResult dialogResult = Messages.Question("Podany bon był już użyty na tej stacji", "Uwaga", false); 
    addVoucher = dialogResult == DialogResult.Yes; 
    if (dialogResult == DialogResult.No)  
    { 
     ViewTyped.PaymentValueEditor.Focus(); 
    } 
} 
if(addVoucher) 
{ 
    Vouchers.Add(voucher); 
    Payment.OriginalToPay = Payment.ToPay; 
    ViewTyped.PaymentNumberEditor.Focus(); 
    ViewTyped.ChangeEditor.Focus(); 
} 
1

嵌套if語句在概念上一樣簡單地取與這些操作:

if (duplicateVoucherChecker(voucher) && 
    Messages.Question("Podany bon był już użyty na tej stacji", "Uwaga",false) 
     == DialogResult.No) 
{ 
    ViewTyped.PaymentValueEditor.Focus(); 
} 
else 
{ 
    Vouchers.Add(voucher); 
    Payment.OriginalToPay = Payment.ToPay; 
    ViewTyped.PaymentNumberEditor.Focus(); 
    ViewTyped.ChangeEditor.Focus(); 
} 

注意這需要的代碼隨時提問Messages.Question返回除No以外的任何值,而不僅僅是返回Yes。如果Messages.Question可以返回除YesNo以外的值,並且您不應該運行有問題的代碼(如果有),那麼您擁有的代碼大概與您希望的一樣好;最好你可以將重複的代碼重構成一個方法。

1

您只需要在存在重複憑證的情況下存儲dialogResult的狀態。

var addVoucher = true; 
if (duplicateVoucherChecker(voucher)) 
{ 
    DialogResult dialogResult = Messages.Question("Podany bon był już użyty na tej stacji", "Uwaga", false); 
    addVoucher = (dialogResult == DialogResult.Yes); 
    if (dialogResult == DialogResult.No) 
    { 
     ViewTyped.PaymentValueEditor.Focus(); 
    } 
} 
if (addVoucher) 
{ 
    Vouchers.Add(voucher); 
    Payment.OriginalToPay = Payment.ToPay; 
    ViewTyped.PaymentNumberEditor.Focus(); 
    ViewTyped.ChangeEditor.Focus(); 
}