2011-12-06 10 views
6

mam rodzajowe klasy wyjątku tak:skonstruowane typ rodzajowy w części cref XML-komentarzu

public class DuplicateException<TEntity> : Exception 
{ 
    public TEntity Entity { get; set; } 
} 

I mam metodę nierodzajową co może rzucać skonstruowane wyjątek Generic:

void Save() 
{ 
    throw new DuplicateException<SomeEntity>(); 
} 

ten metoda może wyrzucić ten ogólny wyjątek, ale tylko ten skonstruowany typ DuplicateException<SomeEntity> i nie może wyrzucić tego wyjątku z innym parametrem typu zamiast SomeEntity.

Teraz chcę określić ten fakt w komentarzu xml dla metody Save. This article opisuje trochę jak z wyjątkiem uwag metod generycznych i próbowałem te dwie alternatywy:

1) Wkłady przez defauly przez autouzupełniania w VS:

/// <exception cref="DuplicateException{TEntity}" /> 

2) Zastąpiony TEntity z SomeEntity

/// <exception cref="DuplicateException{SomeEntity}" /> 

Jednak w obu przypadkach wynikowy kod XML nadal stwierdza, że ​​ta metoda może generować typowy nie skonstruowany typ, który nie wspomina o SomeEntity w ogóle:

<exception cref="T:MyNameSpace.DuplicateException`1" /> 
+0

Czy należy podać ogólny wyjątek? Jedynym zastosowaniem tego byłoby, gdyby dany fragment kodu mógł potencjalnie rzucić DuplicateException i DuplicateException , a chcesz tylko złapać jeden, ale nie drugi. –

+0

OK, ale dlaczego nie wystarczy jeden wyjątek DuplicateException, który można wyrzucić z dowolnej metody Save *? Dlaczego musi być ogólny? –

+0

Bycie silnie wpisanym na klawiaturze nie przynosi zbyt wiele. Tak, możesz mieć silnie wpisaną właściwość z obiektem, który był zapisywany. Ale co zrobisz z tą mocno wpisaną własnością? Myślę, że lepiej będzie mieć tutaj wyjątek ogólny. –

Odpowiedz

3

Celem atrybutu cref jest link do dokumentacji dla danego typu. Ale nie ma dokumentacji dla konkretnych rodzajów generycznych, więc nie jest zaskakujące, że wygenerowany atrybut cref jest dla ogólnej definicji typu. Twoje zainteresowanie polega na tym, że chcesz wyświetlić coś innego niż to, co jest w linku. Możesz to zrobić, gdy używasz tego elementu, ponieważ jego zawartość jest tekstem linku. Ale w elemencie zawartość elementu jest opisem momentu wystąpienia wyjątku. Więc nie sądzę, że istnieje sposób, aby zrobić to, czego szukasz.

Powiązane problemy