优化冗余else语句
我的代码块:优化冗余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
。
如果对话框未显示或结果为是,您可以使用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();
}
这将运行冗余代码,如果'DialogResult'不是'No',这是不是原来的代码做(同Servy答案) –
@艾哈迈德·伊布拉辛你是对的。固定。 – juharr
这不会编译,你的如果有“dialogShownAndNoPicked”,但你的布尔是“dialogShownAndYesNotPicked” – Mason11987
您可以使用有意义的变量来存储状态。如果你有重复的代码,这也表明你可以创建可重用的方法,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();
}
嵌套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
可以返回除Yes
或No
以外的值,并且您不应该运行有问题的代码(如果有),那么您拥有的代码大概与您希望的一样好;最好你可以将重复的代码重构成一个方法。
您只需要在存在重复凭证的情况下存储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();
}
听起来更适合[codereview.se] – Xan