Есть ли способ уменьшить количество используемых операторов if? - PullRequest
0 голосов
/ 18 января 2019

Так что, по сути, я пытаюсь уменьшить сумму, если используются заявления.

Мне нужно, чтобы сообщение было специфичным для обоих типов сертификатов. Вот что является причиной проблемы. Я мог бы использовать || и && операторы, но тогда мне нужно, чтобы сообщение было немного расплывчатым, чего я не хочу.

Операторы Switch не работают, потому что я использую> и < Я пытался использовать? но я не мог понять это.

if (compatibilityCerts > 2 && nonCompCerts > 2)
{
    rtbSummaryLog.AppendText(string.Format("There Are More Than Two Compatibility And Non-Compatibility Certificates On This Smart Card. {0}", Environment.NewLine));
    pctCertificateQuantity.BackColor = Color.Red;
    lblCertificateQuantity.Text = "More Than Two Compatibility And Non-Compatibility Certificates Detected";
        }
        else if (compatibilityCerts == 0 && nonCompCerts == 0)
        {
            rtbSummaryLog.AppendText(string.Format("There Are No Certificates On This Smart Card. {0}", Environment.NewLine));
            pctCertificateQuantity.BackColor = Color.Red;
            lblCertificateQuantity.Text = "No Certificates Detected";
        }
        else if (compatibilityCerts < 2 || nonCompCerts < 2)
        {
            rtbSummaryLog.AppendText(string.Format("There Are Certificates Missing On This Smart Card. {0}", Environment.NewLine));
            pctCertificateQuantity.BackColor = Color.Red;
            lblCertificateQuantity.Text = "No Certificates Detected";
        }
        else
        {
            if (compatibilityCerts > 2)
            {
                rtbSummaryLog.AppendText(string.Format("There Are More Than Two Compatibility Certificates On This Smart Card. {0}", Environment.NewLine));
                pctCertificateQuantity.BackColor = Color.Red;
                lblCertificateQuantity.Text = "More Than Two Compatibility Certificates Detected";
            }
            else if (nonCompCerts > 2)
            {
                rtbSummaryLog.AppendText(string.Format("There Are More Than Two Non-Compatibility Certificates On This Smart Card. {0}", Environment.NewLine));
                pctCertificateQuantity.BackColor = Color.Red;
                lblCertificateQuantity.Text = "More Than Two Non-Compatibility Certificates Detected";
            }
            else if (compatibilityCerts == 0)
            {
                rtbSummaryLog.AppendText(string.Format("There Are No Compatibility Certificates On This Smart Card. {0}", Environment.NewLine));
                pctCertificateQuantity.BackColor = Color.Red;
                lblCertificateQuantity.Text = "No Compatibility Certificates Detected";
            }
            else if (nonCompCerts == 0)
            {
                rtbSummaryLog.AppendText(string.Format("There Are No Non-Compatibility Certificates On This Smart Card. {0}", Environment.NewLine));
                pctCertificateQuantity.BackColor = Color.Red;
                lblCertificateQuantity.Text = "No Non-Compatibility Certificates Detected";
            }
            else
            {
                pctCertificateQuantity.BackColor = Color.LightGreen;
                lblCertificateQuantity.Text = "Number of Certificates is Valid";
            }

        }

Необходимо уменьшить операторы if, но сохранить конкретные сообщения.

1 Ответ

0 голосов
/ 18 января 2019

Вы можете использовать переключатель, если вы хотите повысить удобочитаемость, используя Pattern Matching.

var pair = new {Compatibilty=compatibilityCerts ,NonCompatibilty=nonCompCerts };
switch(pair)
{
    case var item when item.Compatibilty > 2 && item.NonCompatibilty > 2:
    // Do Something
    break;
    case var item when item.Compatibilty == 2 && item.NonCompatibilty == 2:
    // Do Something
    break;
    case var item when item.Compatibilty < 2 && item.NonCompatibilty < 2:
    // Do Something
    break;
    case var item when item.Compatibilty > 2 :
    // Do Something
    break;
    case var item when item.NonCompatibilty > 2 :
    // Do Something
    break;
    case var item when item.Compatibilty == 0 :
    // Do Something
    break;
    default:
    // Do Something
    break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...