Track
/
C#
C#
/
Esercizi
/
Instruments of Texas
Instruments of Texas

Instruments of Texas

Esercizio di apprendimento

Introduzione

Filtro delle eccezioni

when è la parola chiave per filtrare le eccezioni. Si mette dopo l'istruzione catch e può accettare un'espressione booleana che contenga qualsiasi valore sia nello scope in quel momento. Se l'espressione restituisce true, allora viene eseguito il blocco associato a quell'istruzione catch; altrimenti si passa a controllare l'istruzione catch successiva, se c'è.

try
{
    // do stuff
}
catch (Exception ex) when (ex.Message != "")
{
    // output the message when it is not empty
}
catch (Exception ex)
{
    // show stack trace or something.
}

Eccezioni definite dall'utente

Un'eccezione definita dall'utente è una classe qualsiasi definita nel tuo codice che deriva da System.Exception. È soggetta a tutte le regole dell'ereditarietà tra classi, ma in più il compilatore e il runtime del linguaggio trattano queste classi in modo speciale, permettendo di lanciare e catturare le loro istanze al di fuori del normale flusso di controllo, come abbiamo visto nell'esercizio exceptions.

Le eccezioni definite dall'utente servono spesso a trasportare informazioni aggiuntive, come un messaggio e altri dati rilevanti, da rendere disponibili alle routine che le catturano.

Istruzioni

Mentre lavori presso Instruments of Texas, ti viene affidato il compito di lavorare su una calcolatrice sperimentale scritta in C#. Stai costruendo un banco di prova per verificare alcune funzioni della calcolatrice, a cominciare dalla moltiplicazione. Ti accorgerai che c'è una particolare attenzione quando i due operandi della moltiplicazione sono negativi.

La classe Calculator ti è stata fornita e non va modificata.

1. Completa la definizione dell'eccezione definita dall'utente CalculationException

Completa la definizione del costruttore di CalculationException, che dovrà memorizzare (incapsulare) qualsiasi eccezione lanciata dalla calcolatrice, oltre agli operandi che vengono elaborati nel momento in cui l'eccezione viene lanciata.

2. Gestisci le condizioni di overflow nella calcolatrice e fornisci informazioni più dettagliate al chiamante

Implementa il metodo CalculatorTestHarness.Multiply(), che deve chiamare il metodo Calculator.Multiply() dell'istanza di Calculator passata al costruttore, passando i valori interi x e y. Se nel metodo Calculator.Multiply() si verifica un overflow, viene lanciata un'OverflowException. Questa eccezione va intercettata nel metodo CalculatorTestHarness.Multiply() e incapsulata in una CalculationException, e i valori x e y in gioco vanno memorizzati come operandi dell'eccezione. L'oggetto CalculationException appena creato va lanciato. Puoi ignorare il valore restituito dal metodo Calculator.Multiply() se l'operazione riesce.

var cth = new CalculatorTestHarness(new Calculator());
cth.Multiply(Int32.MaxValue, Int32.MaxValue);
// => throws an instance of CalculationException

var cth2 = new CalculatorTestHarness(new Calculator());
cth2.Multiply(3, 2);
// => silently exits

3. Verifica l'operazione di moltiplicazione con input validi

Implementa il metodo CalculatorTestHarness.TestMultiplication(), che prende due numeri interi e chiama il metodo CalculatorTestHarness.Multiply(). Viene restituito "Multiply succeeded".

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(6, 7);
// => "Multiply succeeded"

4. Verifica l'operazione di moltiplicazione con input negativi

Modifica il metodo CalculatorTestHarness.TestMultiplication() in modo che venga restituito "Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>" se entrambi gli argomenti interi sono negativi (minori di zero).

Il segnaposto <INNER_EXCEPTION_MESSAGE> va sostituito con il messaggio dell'eccezione interna della CalculationException.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(-2, -Int32.MaxValue);
// => "Multiply failed for negative operands. " + innerException.Message

5. Verifica l'operazione di moltiplicazione con input positivi

Modifica il metodo CalculatorTestHarness.TestMultiplication() in modo che venga restituito "Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>" se almeno uno degli argomenti interi non è negativo.

Il segnaposto <INNER_EXCEPTION_MESSAGE> va sostituito con il messaggio dell'eccezione interna della CalculationException.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
C# Exercism

Vuoi iniziare Instruments of Texas?

Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.