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" />
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. –
OK, ale dlaczego nie wystarczy jeden wyjątek DuplicateException, który można wyrzucić z dowolnej metody Save *? Dlaczego musi być ogólny? –
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. –