2013-05-17 10 views
8

W moim repozytorium plików, będę rzucać następujące wyjątki, gdy metoda InsertFile() nazywa się:ApplicationException lub utworzyć niestandardowe wyjątki?

  • Kiedy upload limit rozmiaru pliku zostanie przekroczony
  • Gdy pojemność pamięci zostanie przekroczona

Na W chwili, gdy po prostu wyrzucam ApplicationException z odpowiednią wiadomością:

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."); 
    } 

    // ... 
} 

Pytania:

Czy istnieją lepsze klasy wyjątków, których powinienem używać tutaj?

Czy powinienem tworzyć własne niestandardowe wyjątki, korzystając z ApplicationException?

Odpowiedz

8

Może czytać documentation:

Jeśli projektowanie aplikacji, która musi stworzyć swoje własne wyjątki, zaleca się czerpać niestandardowe wyjątki z klasy Exception. Początkowo sądzono, że niestandardowe wyjątki powinny pochodzić z klasy ApplicationException; jednak w praktyce nie stwierdzono znaczącej wartości dodanej.

Co do tego, czy istnieją lepsze wyjątki do rzucania - niektóre mogą rozważyć wyrzucenie ArgumentOutOfRangeException, jeśli nie chcesz definiować własnego wyjątku.

+0

Dziękujemy za zgłoszenie się na temat 'ApplicationException'. 'ArgumentOutOfRangeException' brzmi odpowiedni: _" Wyjątek, który jest generowany, gdy wartość argumentu wykracza poza dopuszczalny zakres wartości określony przez wywoływaną metodę. "_ – davenewza

+0

[Ta odpowiedź] (http: // stackoverflow .com/a/32854414/1497596) przytacza również dokumentację [ApplicationException] (https://msdn.microsoft.com/en-us/library/System.ApplicationException) i zapewnia podobne (i zaktualizowane) wskazówki. – DavidRR

1

Cóż, do tej pory wszystko było w porządku, ale osobiście wyrzuciłbym zamiast tego System.ArgumentException (ze szczegółową wiadomością).

3

Załóżmy, że zależy to od tego, w jaki sposób planujesz obsługę wyjątków. Rzucanie określonych wyjątków pozwala ci na nie odpowiedzieć, um, konkretnie. Na przykład:

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

W kodzie klienta byłyby kontrole, takie jak 'IsFileSizeExceeded()', więc nie musiałbym obsługiwać określonych wyjątków, aby wysłać zwrotne informacje do użytkownika. Będę po prostu musiał je zarejestrować. – davenewza

3

chciałbym użyć ArgumentException i InvalidOperationException, respecitively.

Powiązane problemy