2011-12-06 11 views
6

Tôi có lớp ngoại lệ chung chung như thế này:xây dựng kiểu chung chung trong phần cref của xml-comment

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

Và tôi có phương pháp không chung chung mà có thể ném xây dựng ngoại lệ chung:

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

này phương pháp có thể ném ngoại lệ chung này nhưng chỉ có loại được xây dựng này DuplicateException<SomeEntity> và nó không thể ném ngoại lệ này với một số tham số kiểu khác thay vì SomeEntity.

Bây giờ tôi muốn chỉ định thực tế này trong xml-comment cho phương thức Save. This article mô tả một chút làm thế nào để bình luận phương pháp với ngoại lệ chung và tôi đã thử hai phương án sau đây:

1) Phụ trang bằng defauly bởi autocomplete trong VS:

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

2) thay thế TEntity với SomeEntity

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

Nhưng trong cả hai trường hợp, đầu ra XML vẫn tuyên bố rằng phương pháp này có thể ném chung loại không được xây dựng loại không đề cập đến SomeEntity tại tất cả:

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

Có cần phải ném một ngoại lệ chung không? Việc sử dụng duy nhất đó sẽ là nếu một đoạn mã cụ thể có khả năng có thể ném DuplicateException và DuplicateException , và bạn chỉ muốn bắt một đoạn mã chứ không phải cái kia. –

+0

Ok, nhưng tại sao không chỉ có một DuplicateException duy nhất có thể được ném từ bất kỳ phương thức Save * nào? Tại sao nó cần phải được chung chung? –

+0

Được đánh máy mạnh mẽ không thực sự giúp bạn nhiều. Có, bạn có thể có thuộc tính được đánh máy mạnh với đối tượng đang được lưu. Nhưng bạn sẽ làm gì với thuộc tính được đánh máy mạnh mẽ đó? Tôi nghĩ rằng bạn sẽ tốt hơn với một ngoại lệ không chung chung ở đây. –

Trả lời

3

Mục đích của thuộc tính cref là liên kết đến tài liệu cho loại. Nhưng không có tài liệu cho các kiểu generic cụ thể, do đó, không ngạc nhiên khi thuộc tính cref được tạo ra là cho định nghĩa kiểu generic. Mối quan tâm của bạn là bạn muốn hiển thị một cái gì đó khác với những gì có trong liên kết. Bạn có thể làm điều đó khi sử dụng phần tử, vì nội dung của phần tử là văn bản của liên kết. Nhưng trong phần tử, nội dung của phần tử là mô tả về thời điểm ngoại lệ xảy ra. Vì vậy, tôi không nghĩ rằng có một cách để làm những gì bạn đang tìm kiếm.