2010-11-03 22 views
25

Trong Java, bạn xác định rõ ràng ngoại lệ nào được ném bằng cách sử dụng từ khóa "ném". Bằng cách đó, bất cứ ai gọi phương pháp của bạn đều biết những gì để nắm bắt.C# xác định rõ ràng những ngoại lệ nào được ném

Có điều gì đó trong C# không? Nếu không, làm thế nào để tôi biết ngoại lệ để bắt giữ, hoặc làm cách nào để tôi cho người khác biết ngoại lệ cần nắm bắt là gì?

Ngoài ra, nếu tôi xác định giao diện, có cách nào để nói "methodX() nên ném ngoại lệ này về lỗi"?

+0

Tôi tưởng tượng phiên bản của khung công tác .NET sẽ tạo sự khác biệt ở đây, nhưng trong các phiên bản tôi sử dụng câu trả lời là: bạn ghi lại các ngoại lệ tiềm năng, và không - không có cách nào để loại bỏ ngoại lệ. bẫy tất cả các ngoại lệ bên ngoài và gói lại chúng vào loại ưa thích của bạn). Nó không chỉ là trường hợp ngoại lệ bạn có thể tạo ra trong phương pháp, cũng có bất kỳ bạn đang cho phép bong bóng. – Rudu

Trả lời

32

Không có gì tương đương trong C# là: The Trouble with Checked Exceptions

Ngoài tài liệu hướng dẫn, không có cách nào để khai báo một giao diện để nói "methodX() nên ném ngoại lệ này về lỗi".

+1

Điều thú vị nhưng không đúng. – JeremyP

+0

đọc rất thú vị –

+1

@JeremyP nó sai như thế nào? – dbkk

3

C# không hỗ trợ điều này. (Không phải là tôi biết anyway). Những gì bạn có thể làm là sử dụng Xml Comments để khi gọi cho bạn phương thức, dữ liệu này sẽ được hiển thị bởi intellisense.

2

Theo như tôi biết không có tuyên bố ném trong C# bạn có thể ghi lại phương pháp của bạn chỉ ra rằng nó ném một ngoại lệ nhưng không xử lý lỗi cưỡng bức.

+0

lol thời gian nó đã cho tôi để viết này 2 người khác đã được đăng! – DeliveryNinja

8

Tính năng này không khả dụng trong C#. Bạn có thể tạo tài liệu XML thích hợp (3 dấu gạch chéo ///) và nêu rõ những ngoại lệ nào đang được ném ra.

Điều này sẽ được chọn bởi cơ chế IntelliSense và sẽ hiển thị cho người dùng của lớp/phương pháp trước khi họ sử dụng.

2

C# không hỗ trợ ngoại lệ đã kiểm tra. Các nhà thiết kế ngôn ngữ xem xét các ngoại lệ đã kiểm tra theo cách mà java sử dụng chúng là một ý tưởng tồi.

Some workarounds

10

C# /. Net không có ngoại lệ kiểm tra, họ đã chứng minh được ít hữu dụng trong các hệ thống quy mô lớn hơn so với suy nghĩ đầu tiên. Trong rất nhiều dự án, thời gian để duy trì các đặc tả ngoại lệ kiểm tra lớn hơn rất nhiều so với thời gian gỡ lỗi được lưu bằng cách có chúng.

Trường hợp ngoại lệ được kiểm tra có vẻ như là một lý tưởng tốt cho đến khi bạn có các phương thức có thể đưa đại biểu hoặc cuộc gọi vào đối tượng bạn tham gia. Hãy đơn giản, phương thức Sort() trong danh sách không thể biết ngoại lệ vì nó không biết những gì ngoại lệ, phương thức Compar() trên các đối tượng đang được sắp xếp sẽ ném.

Vì vậy, thông số kỹ thuật cho các ngoại lệ mà phương pháp có thể ném phải có thể bao gồm thông tin về cách ngoại lệ được điền từ các đối tượng và đại biểu. Không ai biết cách làm điều này!

Tuy nhiên, có các công cụ mà bạn kiểm tra xem bạn có đang bắt tất cả ngoại lệ hay không - xem Exception Hunter bởi Red Gate. Cá nhân tôi không thấy nhiều giá trị trong công cụ này, tuy nhiên nếu bạn thích ngoại lệ đã kiểm tra, bạn có thể thấy chúng hữu ích.

Các vấn đề liên quan