Exception 什么';处理空值的最佳做法是什么?

Exception 什么';处理空值的最佳做法是什么?,exception,exception-handling,null,Exception,Exception Handling,Null,我有一个应用程序,它在一个方法中将DNS主机名解析为IP问题是,如果解析的方法被传递一个空值,那么最好的做法是什么?有几种选择: -抛出ArgumentNullException(不应捕获编程错误,顶部全局错误处理程序除外) -返回另一个主机名(例如,如果一个方法接受一个人的名字作为参数,并且该参数为null,我可以返回“person”)。如果这是不可能的,即网络中只有一台主机可以为其提供主机名,那么抛出异常是有意义的。可能比使用另一个主机名要好,因为它可能会让最终用户感到烦恼 什么更好 谢谢抛

我有一个应用程序,它在一个方法中将DNS主机名解析为IP问题是,如果解析的方法被传递一个空值,那么最好的做法是什么?有几种选择:

-抛出ArgumentNullException(不应捕获编程错误,顶部全局错误处理程序除外)

-返回另一个主机名(例如,如果一个方法接受一个人的名字作为参数,并且该参数为null,我可以返回“person”)。如果这是不可能的,即网络中只有一台主机可以为其提供主机名,那么抛出异常是有意义的。可能比使用另一个主机名要好,因为它可能会让最终用户感到烦恼

什么更好


谢谢

抛出异常。在接收不可接受的输入的情况下,您的方法不应该返回看似有效的值。它应该返回null或抛出异常(更好的路由)。这样做的原因是,即使你提出了一些“错误代码字符串”,也会有人看不到你的文档,或者你会忘记,然后你会把头撞到墙上,想知道为什么它没有失败,而它应该失败。

把它想象成一种服务。使用该服务的人会想知道是否传入了垃圾值,以便能够快速、适当地处理它。否则你会把垃圾扔出去,甚至不知道出了什么事


因此:抛出异常。

我会说抛出异常,然后让顶级处理程序向用户打印适当的消息。返回备用主机名可能不是大多数用户所期望的。在我开发的一个应用程序中,情况是这样的:

Is the Hostname available? Yes, return that.
If the Host IP Address available? Yes, return that.
Else return `Unknown`.
但在您的情况下(从使用.NET的声音来看),如果这是应用程序的致命错误,它应该抛出堆栈中的任何错误。如果您确实希望返回某些内容来代替主机名,那么捕获异常并进行恢复是正确的


“boneheaded”异常,其中有人传入null,应该抛出堆栈而不被捕获,因为这是指示性的或错误的代码,应该在找到时修复

第三个选项可能是返回相应的空IP地址。这允许调用者根据返回值决定要做什么。(可能您已经为没有相应地址的主机名返回了某种类型的空IP地址。)

正确的方法是使用“trier/doer”模式:使用一个“trier”方法,该方法将返回可能有效或可能无效的地址(这样调用方就可以知道地址是否有效)和一个“doer”方法,该方法将返回有效地址,如果不能返回,则引发异常。准备处理无法获得有效地址的代码应使用trier方法;没有为这种可能性准备的代码应该使用“实干家”方法。trier/doer模式通常是通过让trier和doer方法包装第三个方法来实现的,该方法包含一个参数,指示在发生故障时应该做什么。

我想这将使它变得更加清晰。我有点同意,并在我的帖子中回答了我自己的问题。