PDA

View Full Version : [C#] - Cappottare un ciclo


gugoXX
19-03-2008, 11:05
do
{
DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
if (pippo != null){
FaiQualcosaconPippo(pippo);
}
DataLayer.Commit();
} while (pippo!=null);


E' possibile riscriverlo facendo il confronto
pippo!=null
una volta sola?

0rph3n
19-03-2008, 11:49
ecco la mia ennesima cazzata :sofico:

DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
while (pippo!=null)
{
FaiQualcosaconPippo(pippo);
DataLayer.Commit();

DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
}
DataLayer.Commit();

kernel::panic
19-03-2008, 13:10
Cosė ti eviti di fare 2 volte il controllo, ma sono cmq pių righe di codice:

while(true)
{
DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
try
{
if(pippo == null)
break;
else
FaiQualcosaconPippo(pippo);
}
finally
{
DataLayer.Commit();
}
}


Ciao ;)

gugoXX
19-03-2008, 14:40
ecco la mia ennesima cazzata :sofico:

DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
while (pippo!=null)
{
FaiQualcosaconPippo(pippo);
DataLayer.Commit();

DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
}
DataLayer.Commit();



Grazie.
Pero' mi sembra un po' come il tagliarsi una gamba perche' ho un unghia incarnita :D:D
Scherzo, purtroppo non mi sembra piu' elegante.

gugoXX
19-03-2008, 14:45
[QUOTE=kernel::panic;21629967]Cosė ti eviti di fare 2 volte il controllo, ma sono cmq pių righe di codice:

while(true)
{
DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
try
{
if(pippo == null)
break;
else
FaiQualcosaconPippo(pippo);
}
finally
{
DataLayer.Commit();
}
}

Grazie anche a te.
Anche questa purtroppo non mi sembra guadagni in leggibilita'.
Mi sa che una riposta che mi piaccia davvero non si riesca a trovare.
Facciamo cosi'. Sposto il controllo
if (parametro!=null)
dentro la funzione, che tanto ci sta anche bene perche' mi e' stato segnalato come assente dai test automatici.
Me lo tengo cosi'


do
{
DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
FaiQualcosaconPippo(pippo);
DataLayer.Commit();
} while (pippo!=null);

...

public void FaiQualcosaconPippo(parametro)
{
if (parametro==null) return;
// continua
}

cionci
19-03-2008, 16:15
while(true)
{
DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
if (pippo == null){
DataLayer.Commit();
break;
}
FaiQualcosaconPippo(pippo);
DataLayer.Commit();
}

gugoXX
19-03-2008, 16:39
...

Grazie.
Ci devo pensare.
Vedere 2 Commit per una BeginTransaction non mi esalta

cionci
19-03-2008, 16:54
Capisco...cosė ?
while(true)
{
DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
if (pippo == null){
break;
}
FaiQualcosaconPippo(pippo);
DataLayer.Commit();
}
DataLayer.Commit();

cionci
19-03-2008, 16:57
Anche cosė:

DataLayer.BeginTransaction();
while(true)
{
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
if (pippo == null){
break;
}
FaiQualcosaconPippo(pippo);
DataLayer.Commit();
DataLayer.BeginTransaction();
}
DataLayer.Commit();
o cosė:

DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
while(pippo != null)
{
FaiQualcosaconPippo(pippo);
DataLayer.Commit();
DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
}
DataLayer.Commit();

0rph3n
19-03-2008, 16:59
o cosė:

DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
while(pippo != null)
{
FaiQualcosaconPippo(pippo);
DataLayer.Commit();
DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
}
DataLayer.Commit();

copione :Prrr: :ciapet:

cionci
19-03-2008, 17:01
copione :Prrr: :ciapet:
Non avevo visto :D

gugoXX
19-03-2008, 17:26
Facciamo cosi'.
Le metto tutte e 4.

Poi genero un numero casuale di volta in volta e vado ad eseguire la corrispondente.

cionci
19-03-2008, 17:30
Poi genero un numero casuale di volta in volta e vado ad eseguire la corrispondente.
:asd:
Comunque a parte gli scherzi, la migliore č la tua con l'if spostato nella funzione ;)

morskott
19-03-2008, 18:48
sparo la mia try{
while (true){
DataLayer.BeginTransaction();
RispostaDaDatabase pippo = DomandaAlDatabase(parametri);
if (pippo==null) throw new MiaException(ex);
FaiQualcosaconPippo(pippo);
DataLayer.Commit();
}
}catch(MiaException ex){
DataLayer.Commit();
}(sempre che col C# puoi fare questo tipo di gestione delle eccezioni)

cionci
19-03-2008, 18:56
Usare le eccezioni cosė sinceramente non mi piace molto ;)