2011-12-06 149 views
6

我有通用的異常類是這樣的:構造泛型類型

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

而且我有可能會拋出構造泛型例外非泛型方法:

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

這方法可能拋出這個泛型異常,但只有這個構造類型爲DuplicateException<SomeEntity>,它不能拋出此異常與其他類型參數,而不是SomeEntity

現在我想在xml-comment中爲Save方法指定這個事實。 This article介紹一點點如何評論與一般異常的方法和我已經試過這兩個備選方案:由defauly在VS

1)通過插入自動完成:

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

2)更換TEntitySomeEntity

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

但在這兩種情況下,輸出XML仍然指出,這種方法可能會拋出通用非構造型沒有提及SomeEntity所有內容:

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

是否有必要拋出一個泛型異常?如果一個特定的代碼片段可能會拋出DuplicateException 和DuplicateException ,並且您只想捕獲一個而不是另一個,則唯一的用處。 –

+0

好的,但爲什麼不只有一個可以從任何Save *方法拋出的單個DuplicateException呢?爲什麼它需要是通用的? –

+0

強類型並不能真正幫助你。是的,您可以使用正在保存的對象具有強類型屬性。但是你打算如何處理這種強類型的屬性?我想你會在這裏變得更好,並且會有一個非泛型例外。 –

回答

3

cref屬性的用途是鏈接到類型的文檔。但是沒有關於具體泛型類型的文檔,所以生成的cref屬性用於泛型類型定義並不奇怪。你的擔心是你想顯示不同的東西在鏈接中。使用元素時可以這樣做,因爲元素的內容是鏈接的文本。但是在元素中,元素的內容是異常發生時的描述。所以我不認爲有辦法做你想找的東西。