[.NET/C#] Return binnen Exception handling

Pagina: 1
Acties:

  • Scare360
  • Registratie: Juli 2001
  • Laatst online: 27-08 08:10
Mijn compiler vertelt mij dat niet alle paden een return waarde geven. Klopt als een bus... ik roep in mijn Catch geen throw new Exception aan maar roep een los dialoogje aan welke de exception inzichtelijk maakt voor de gebruiker. Hoe kan ik mijn compiler tricken zonder dat ik na dat dialoogje alsnog een fout op moet gooien middels throw new Exception...

iemand?

Verwijderd

De compiler is wel vaker het spoor bijster. (Zie onder voor voorbeeld).

Na de 'catch' zal de executie vervolgen na het complete try block. Als daar een return staat zou het moeten werken.

(dus zoiets als:
code:
1
2
3
4
5
6
7
8
9
try
{
     // doe iets dat fout gaat
}
catch(Exception ex)
{
     // show dialog
}
return true;

Wat bv de compiler ook in het riet stuurt is dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void foo()
{
     bool bFileOpened=false;
     StreamWriter wsFile;

     if(m_bBar1 || m_bBar2)
     {
         // open file
         wsFile = new StreamWriter(m_sFilename);
         bFileOpened=true;
     }
     // do stuff
     if(bFileOpened)
     {
        wsFile.Close();  // ERROR! uninitialized local var used!
     }
}

Terwijl dit correct werkende code is. :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Op donderdag 25 april 2002 14:26 schreef Otis het volgende:

Na de 'catch' zal de executie vervolgen na het complete try block.
Misschien even off-topic, maar als ik in het 'except' blok geraak, dan zou ik graag hebben dat de code na m'n try block niet uitgevoerd wordt, dat de execution dus stopt.

In Delphi kan ik dat realiseren door de Abort() functie op te roepen, maar hoe kan ik dat in C#?

https://fgheysels.github.io/


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik had pas ook een leuke melding van een 'slimme' compiler :) . Op een stream zitten een aantal objecten geserializeerd in XML. Ik wil de laatste uit deze stream hebben en de enige methode die ik tot mijn beschikking heb is readObject() die een exception gooit:
code:
1
2
3
4
5
6
7
8
Object result;
try {
  while(true) {
    result = decoder.readObject();
  }
} catch(SAXParseException exc) {
}
return result;

Maar dat ging dus niet door :o . De return was volgens e Java compiler een unreachable statement.... Boolean variabele introduceren loste het probleem op.

Over het algemeen is het wel een aardige regel om te probeen maar 1 return statement een methode te hebben. De 'standaard' variabele 'result' wordt op mogelijk verschillende plekken in de methode een waarde gegeven. Zo kan het nooit misgaan en het is ook wel een fraaie stijl van werken :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Scare360
  • Registratie: Juli 2001
  • Laatst online: 27-08 08:10
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public DataTable Select()
        {

            try
            {
                return dtToReturn;
            }
            catch(Exception excpt)
            {
                BugTracking.LogException(excpt);
            }
            finally
            {

            }
        }

Kijk dit is eens tuk code wat die vervelende fout veroorzaakt... concreet jullie zeggen dus dat ik middels een hack deze zaak moet oplossen? Ik krijg dus altijd een rommeltje als resultaat op deze manier

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 06-09 22:39
Op donderdag 25 april 2002 15:28 schreef paulgielens het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public boolean Select(Datatable dest)
{
    boolean result = false;
    
    try
    {
        dest = dtToReturn;
        result = true;
    }
    catch(Exception excpt)
    {
        BugTracking.LogException(excpt);
        result = false;
    }
    finally
    {
    }
    return result;
}
Misschien is dat wat? Hoe geef je anders een fatsoenlijke return waarde als je je exception niet rethrowed?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1