Principale utente con più risposte
creare metodo con eccezioni nel risultato

Domanda
-
spero esista qualcosa che risponda a questo mio quesito...
-riuscire a restituire tramite un unico metodo o una stringa o un doble-
ma iniziamo con ordine:
supponiamo di creare una funzione per il calcolo degli interessi. i quali interessi possono essere sia positivi che negativi (negativi ovviamente se è un operazione che porterà una perdita)
Quindi il mio ritorno è un double che puo assumere valori sia positivi che negativi.
Il metodo con cui vengono calcolati questi interessi non è lineare, cioè attraverso una formula ma piu che altro attraverso a delle ipotesi che il mio stesso metodo crea per avicinarsi il piu possibile a una risoluzione.
il mio problema è che se l'algoritmo non riesce a trovare un valore accettabile entro 20 tentativi deve restituire ERRORE
io di solito avrei restituito un valore negativo, che avrebbe significato appunto l'errore o eccezione in quanto fuori dal dominio dei risultati del mio metodo, ma in questo caso qualunque numero fa parte dei possibili risultati che potrei ottenere..quindi dire a priori che -10 equivale alla mia mancata individuazione del interesse è sbagliato perché potrebbe succedere che il risultato sia -10 (trovandolo anche come primo tentativo)
da qui la necessita di riuscire a restituire una stringa, dato che sarebbe comodo anche per dare direttamente il print
Attendo comunque pareri e consigli!
grazie come al solito
Risposte
-
Il suggerimento di rfusè è corretto. Puoi usare un approccio come quello usato dai metodi TryParse di .NET, ovvero definisci un tuo metodo che ha due parametri out, uno con il valore calcolato e l'altro con l'eventuale messaggio. Questo metodo restituisce true se il calcolo è andato a buon fine, false in caso contrario.
Così facendo, se ottieni true, sai che nel parametro out double avrai l'interesse, se invece è false, puoi leggere il valore out string per conoscere l'errore che si è verificato.
Marco Minerva [MCPD]
Blog: http://marcominerva.wordpress.com
Twitter: @marcominerva- Proposto come risposta Carmelo La Monica mercoledì 12 giugno 2013 11:04
- Contrassegnato come risposta maxyz venerdì 14 giugno 2013 10:23
-
Ciao maxyz,
Personalmente, in un contesto come il tuo, più che aspettarmi un risultato di tipo stringa dalla funzione userei o una eccezione custom che mi restituisca l'informazione di errore/situazione o un parametro ref che restituisca il testo errore/informazione mantenendo come risultato del metodo il tipo corretto dell'operazione.
ciao
Rob
- Proposto come risposta Carmelo La Monica mercoledì 12 giugno 2013 11:04
- Contrassegnato come risposta maxyz venerdì 14 giugno 2013 10:23
Tutte le risposte
-
Ciao maxyz,
Personalmente, in un contesto come il tuo, più che aspettarmi un risultato di tipo stringa dalla funzione userei o una eccezione custom che mi restituisca l'informazione di errore/situazione o un parametro ref che restituisca il testo errore/informazione mantenendo come risultato del metodo il tipo corretto dell'operazione.
ciao
Rob
- Proposto come risposta Carmelo La Monica mercoledì 12 giugno 2013 11:04
- Contrassegnato come risposta maxyz venerdì 14 giugno 2013 10:23
-
Il suggerimento di rfusè è corretto. Puoi usare un approccio come quello usato dai metodi TryParse di .NET, ovvero definisci un tuo metodo che ha due parametri out, uno con il valore calcolato e l'altro con l'eventuale messaggio. Questo metodo restituisce true se il calcolo è andato a buon fine, false in caso contrario.
Così facendo, se ottieni true, sai che nel parametro out double avrai l'interesse, se invece è false, puoi leggere il valore out string per conoscere l'errore che si è verificato.
Marco Minerva [MCPD]
Blog: http://marcominerva.wordpress.com
Twitter: @marcominerva- Proposto come risposta Carmelo La Monica mercoledì 12 giugno 2013 11:04
- Contrassegnato come risposta maxyz venerdì 14 giugno 2013 10:23
-
-
Puoi dare un'occhiata alla documentazione di MSDN, ad esempio quella del metodo int.TryParse: http://msdn.microsoft.com/it-it/library/f02979c7.aspx.
Marco Minerva [MCPD]
Blog: http://marcominerva.wordpress.com
Twitter: @marcominerva -
ti ringrazio e quella pagina l'ho guardato anche prima di chiedere aventuale codice aggiuntivo, proprio perche il mio dubbio era la sintassi essenziale per creare un metodo che possa comportarsi come il TryParse
esempio:
public int doppio(int numero)
{
int risultato=0;
risultato=numero*2;
return risultato;
}
modifiche: (ovviamente non penso che cio che ho scritto funzioni)
public int doppio(int numero)
{
int risultato=0;
if(numero>0)
{risultato=numero*2;return risultato;}
else
{return "ERRORE";}
}
-
Ciao maxyz,
ti ringrazio e quella pagina l'ho guardato anche prima di chiedere aventuale codice aggiuntivo, proprio perche il mio dubbio era la sintassi essenziale per creare un metodo che possa comportarsi come il TryParse
esempio:
public int doppio(int numero)
{
int risultato=0;
risultato=numero*2;
return risultato;
}
modifiche: (ovviamente non penso che cio che ho scritto funzioni)
public int doppio(int numero)
{
int risultato=0;
if(numero>0)
{risultato=numero*2;return risultato;}
else
{return "ERRORE";}
}
se ho ben compreso il tuo scenario , vuoi ottenere il risultato della funzione se numero e maggiore di zero , o di conseguenza un errore se e e minore visto il blocco else , puoi realizzare il tutto in questo modo nel blocco else
else{ return (int)MessageBox.Show("ERRORE"); }
puio anche omettere il costrutto else perchè se la condzione if risulterà true non sarà eseguita la riga di codice che ho postato.
Diventerebbe così
private void button1_Click(object sender, EventArgs e) { Text = Doppio(1).ToString(); } public int Doppio(int numero) { if (numero > 0) { var risultato = numero * 2; return risultato; } return (int) MessageBox.Show("errore."); }
L'ultima riga di codice richide la conversione int , diversamente avresti un errore in fase di compilazione , perchè il metodo e di tipo int e lasceresti un valore di tipo string.
Ciao.
- Carmelo La Monica
- Visual Basic Tips e Tricks Blog
- WordPress.com Blog
- Blogger
- CrystalwebDotNetGroup
- Modificato Carmelo La Monica venerdì 14 giugno 2013 13:19