我有这段代码:
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语句,但如果duplicateVoucherChecker(voucher)
返回false
,我仍然希望完成其他阻止。
答案 0 :(得分: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();
}
答案 1 :(得分: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
可以返回Yes
或No
以外的值,并且您不应该运行相关代码,那么您拥有的代码就和您一样好会希望它是;充其量你可以将重复的代码重构成一个方法。
答案 2 :(得分: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();
}
答案 3 :(得分: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();
}