如何查找一个方法可能抛出的异常类型?

5

我正在编写调用以下方法的代码,该方法存在于Windows.Networking.PushNotifications中。

// Summary:
//     Creates objects that you use to retrieve push notification channels from
//     the Windows Push Notification Services (WNS). These channels are bound to
//     an app or secondary tile.
[Threading(ThreadingModel.MTA)]
[Version(100794368)]
public static class PushNotificationChannelManager
{
    // Summary:
    //     Creates an object, bound to the calling app, through which you retrieve a
    //     push notification channel from Windows Push Notification Services (WNS).
    //
    // Returns:
    //     The object, bound to the calling app, that is used to request a PushNotificationChannel
    //     from the Windows Push Notification Services (WNS).
    [Overload("CreatePushNotificationChannelForApplicationAsync")]
    public static IAsyncOperation<PushNotificationChannel> CreatePushNotificationChannelForApplicationAsync();

}

我希望确保涵盖所有可能会引发异常的情况,并适当地处理每种情况。请问是否可以给我列出可能引发的不同类型异常以及可能导致它们的不同情况?
我不想只使用一个catch语句来捕获所有异常。
catch(Exception ex) { }    

这篇MSDN文章指出:“如果在没有数据连接时尝试注册WNS推送通知通道,会抛出异常。”然而它并未说明异常类型或是否存在其他可能引发异常的情况。 我该如何确定是否存在其他可能的异常类型?

1
你需要关注处理其他代码抛出的异常吗?那是代码责任去处理自定义异常。你只需要捕获所有异常即可。 - Aurimas Neverauskas
同样的主题,更多信息请参见https://dev59.com/HXNA5IYBdhLWcg3wX8vk。 - LosManos
3个回答

4
唯一的方法是文档和源代码,但需要注意的是可能会抛出很多其他异常,如OutOfMemoryExceptionTypeLoadExceptionThreadAbortException等。因此,我认为正确的方法是捕获您能够解决的异常并让其他异常继续传递到调用堆栈中。
还可以阅读 vexing exceptions

为什么要测试不同的错误代码呢?@DaveDev - Hamid Pourjam

1
如果您能模拟那个链接中提到的错误条件之一,就应该能够使用通用异常 catch 来查看抛出的类型。我认为它会抛出一个 System.Runtime.InteropServices.COMException,这是根据文章中提到的错误代码推测的。

开始测试不同的错误代码感觉非常不符合面向对象的思想。 - DaveDev
我同意,但是由于文档没有告诉你确切的内容,那是一个好的开始。其他选择包括获取代码、使用类似.NET Reflector的工具,或者提交一个工单给微软并询问... - Brian Dishaw

1
我希望确保涵盖所有可能引发异常的情况,并适当处理每种情况。
不可能涵盖所有可能引发异常的情况,并适当处理每种情况。
如果您完全理解特定异常可能引发的情况,并且了解程序的不变量,知道它们仍然有效或如何恢复它们,则可以从该异常中恢复。
但是,例如,您可能会遇到由宇宙射线引起的异常,导致机器状态损坏,从而导致访问违规。 您将如何从中恢复? 总有一个点,程序不得不放弃并请求支持人员。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接