c# - 在方法内部生成和处理用户消息?

标签 c# vb.net design-patterns .net-3.5

处理偶尔可能无法评估的函数的最佳方法是什么,但即使它确实失败也不需要停止父例程,尽管有时可能需要向用户解释?

我有这样一个函数,在我的代码深处,它返回一个数字。在编码方面,最简单的方法是使函数可以为 null,并在无法计算时返回 null。这样调用例程可以继续,同时也知道函数返回数字失败。

然而,根据情况,有时我想向用户显示失败的原因,以便他们知道要修复什么。显然仅仅返回 null 是不够的信息。我是否应该在函数本身内部引发消息,因为它评估匿名监听器以捕获并在需要时显示?
(对于那些正确地指出逻辑函数不应该负责创建用户消息的人,我并不是要暗示该函数生成完整的文本消息,只是以某种方式传输问题的原因,以便 UI 稍后可以解析该消息进入消息)

我想的另一个选择是在函数无法计算时在函数内部抛出异常,然后在需要时捕获并解释给用户消息。然而,如前所述,无法评估通常并不意味着例程停止,现在我必须在每次使用它时在函数调用周围放置一个 Try...Catch block 。

最佳答案

异常处理不应该用于流程控制。仅在真正异常的情况下抛出异常。

……咳咳。是时候放下我的傲慢了。

说真的,我不知道您要解决的问题的性质。第一个问题,你算法中的失败是真的失败,还是无法评估可以用NaN值,或者0来表示吗?如果它确实是一个基本的概念错误,算法是否能够在继续之前检查输入?如果是这样,则抛出 ArgumentException 或其派生类 - 最好是后者。这意味着任何其他消费代码都可以处理一般情况(例如,在 IoC 场景中),而您的代码可以处理特定情况,这是可以合理预期的。如果这样做,我建议无论包含此功能的程序集还应提供一些静态验证函数,以允许调用者在调用可能引发异常的内容之前验证入站参数是否有效。

关于c# - 在方法内部生成和处理用户消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6959079/

相关文章:

.net - 10 次连续请求后 HttpWebRequest 超时

mysql - 在 MySQL 中如何使用继承?

c# - 是否可以在我的项目中包含一个二进制文件并使用它?

c# - MVC4 不在浏览器中保存 cookie

windows - 在 VB.NET 中制作二维动态数组

vb.net - 如何在VB中反转列表?

winforms - MVP: View 或演示者应该了解模型吗?

java - 如何面对包含可观察场的可观察对象

c# - 仅在 VS2010 中搜索获取或设置属性的引用?

c# - 将 Json Unicode 转换为 Utf8