优化冗余其他语句
本文关键字:语句 其他 冗余 优化 | 更新日期: 2023-09-27 17:55:52
>我有这个代码块:
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
,我仍然希望完成这个 else 块。
您可以使用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();
}
嵌套if
语句在概念上与简单地 AND 这些操作相同:
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();
}
请注意,这会在返回除 No
以外的任何值Messages.Question
运行有问题的代码,而不仅仅是在返回 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();
}
您可以使用有意义的变量来存储状态。如果您有重复的代码,这也表明您可以创建可重用的方法,例如 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();
}