|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
[C#] using è da evitare?
Mi hanno appena sconsigliato di usare lo using perchè pare che crei casini e non sia del tutto equivalente al try/finally.
E in effetti sto riscontrando un problema sporadico in un applicativo decisamente sovraccaricato che potrebbe giustificare questa affermazione. Ancora non ho avuto modo di discuterne approfonditamente con la persona che me lo ha detto. Qualcun altro ne sa niente? |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Non ho mai però visto grandi benefici rispetto a: Dove necessario, far ereditare da Disposable la mia classe Try/catch/Finally <- e qui chiamo esplicitamente il mio Close o Dispose.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Si', infatti dovrebbe essere equivalente. Solo un po' piu' leggibile. In quanto a bachi non ne so nulla, ne si trova nulla su internet (1 minuti di ricerca pero', occorrerebbe approfondire) Se mai ci fosse un baco non in una libreria, ma addirittura in una keyword penso sarebbero corsi a correggerlo immediatamente.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Penso ad esempio ad una connessione al db: Codice:
SqlConnection conn = null;
try
{
Codice:
using (SqlConnection conn = new SqlConnection(connectionString))
{
L'inconveniente è che una eccezione dentro uno using non si propaga se il Dispose fallisce. Ultima modifica di tomminno : 12-05-2008 alle 16:57. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Ho capito male? Codice:
class Program
{
static void Main(string[] args)
{
using (ClasseFarlocca cf = new ClasseFarlocca())
{
Console.WriteLine("Step1");
}
Console.WriteLine("StepFinale");
Console.ReadKey();
}
}
public class ClasseFarlocca:IDisposable
{
public ClasseFarlocca()
{
}
#region IDisposable Members
public void Dispose()
{
Console.WriteLine("StepDispose");
throw new NotImplementedException();
}
#endregion
}
Step1 StepDispose Eccezione.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Se è fondamentale avere traccia delle possibili eccezioni interne bisonga afffidarsi a catene kilometriche di catch |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Ah. Avevo capito male. Ma cosa intendi per "Il dispose fallisce"? E' strano, ma non ho avuto mai la sensazione che ci fosse qualcosa che non va. Nel caso in cui ci fosse sia l'eccezione nel flusso della using e un'altra eccezione nella Dispose?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 13-05-2008 alle 08:54. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Nel caso di doppia eccezione vedi solo quella del Dispose, perdi completamente le informazioni dell'eccezione interna. Ad esempio la classe SqlConnection il cui Close solleva una SqlException. Ultima modifica di tomminno : 13-05-2008 alle 10:21. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:51.




















