2013-05-17 11 views
8

Nel mio file repository, getterò le seguenti eccezioni quando il metodo InsertFile() si chiama:ApplicationException o creare eccezioni personalizzate?

  • Quando il limite di dimensione file di caricamento viene superata
  • Quando la capacità di archiviazione viene superata

A il momento sto solo gettando un ApplicationException con il relativo messaggio:

public void InsertFile(HttpPostedFile uploadedFile) 
{ 
    if (uploadedFile.ContentLength > FileSizeLimit) 
    { 
     throw new ApplicationException("File size limit exceeded."); 
    } 

    if (uploadedFile.ContentLength + FileStorageUsage > FileStorageCapacity) 
    { 
     throw new ApplicationException("File storage capacity exceeded."); 
    } 

    // ... 
} 

Domande:

Esistono classi di eccezioni migliori che dovrei usare qui?

O dovrei creare le mie eccezioni personalizzate derivando da ApplicationException?

risposta

8

Forse leggere il documentation:

Se si progetta un'applicazione che ha bisogno di creare le proprie eccezioni, si consiglia di derivare eccezioni personalizzate dalla classe Exception. Inizialmente si pensava che le eccezioni personalizzate dovessero derivare dalla classe ApplicationException; tuttavia, in pratica, questo non è stato trovato per aggiungere un valore significativo.

Se esistono eccezioni migliori da eseguire, alcuni potrebbero considerare di lanciare un ArgumentOutOfRangeException se non si desidera definire la propria eccezione.

+0

Grazie per l'avviso su 'ApplicationException'. 'ArgumentOutOfRangeException' suona appropriato: _" L'eccezione che viene generata quando il valore di un argomento è esterno all'intervallo consentito di valori come definito dal metodo richiamato. "_ – davenewza

+0

[Questa risposta] (http: // stackoverflow .com/a/32854414/1497596) cita anche la documentazione per [ApplicationException] (https://msdn.microsoft.com/en-us/library/System.ApplicationException) e fornisce indicazioni simili (e aggiornate). – DavidRR

1

Bene, quello che hai finora va bene, ma personalmente lancerei uno System.ArgumentException (con un messaggio dettagliato).

3

Supponiamo che dipenda da come si pianifica sulla gestione delle eccezioni. Lanciare eccezioni specifiche ti consente di rispondere a loro, ehm, in particolare. Per esempio:

try 
{ 
} 
catch(FileSizeExceededException ex) 
{ 
} 
catch(StorageCapacityExceededException ex) 
{ 
} 
+0

Nel codice client, ci sarebbero dei controlli, come 'IsFileSizeExceeded()', quindi non avrei necessariamente bisogno di gestire eccezioni specifiche per poter inviare feedback all'utente. Dovrò solo registrarli. – davenewza

3

vorrei utilizzare un ArgumentException e un InvalidOperationException, respecitively.

Problemi correlati