举办活动或回归布尔?

时间:2012-05-30 16:09:42

标签: c#

我想知道哪个是打印功能最实用的选项。假设我有一台打印机和这样的打印方法。

 printerEngine.Print("StuffToPrint",Printer,Qty);

如果出现故障应该返回bool(在这种情况下为false)或者引发PrintingFailed事件。

打印失败事件允许我添加更多关于失败原因的背景信息,但我不确定最佳方法。

4 个答案:

答案 0 :(得分:4)

另一个显而易见的选择是抛出异常,就像你试图写入文件或类似内容一样。

该异常可以包含您想要的详细信息,您可以让它将堆栈冒泡到最合适的位置来处理它。

如果Print方法是异步的,您可以考虑返回Task并让 表示成功,失败,完成等(假设您&# 39;重新使用.NET 4)。

答案 1 :(得分:3)

您可能希望失败并出现异常,因为发生异常情况会导致打印作业失败。您可以在异常中包含所需的详细信息,并在您需要的位置处理它。也许只有在您预期会导致作业失败的事情发生时才使用bool。

查看Eric Lippert关于异常处理的this博客文章,这是一个很好的指南。

答案 2 :(得分:2)

这取决于,你想提供它为用户失败的原因,还是将其记录到某种日志?如果你想做其中任何一个,那么再举起事件。

如果您不想同时执行这些操作而只是想确定它是否失败,请使用bool

答案 3 :(得分:1)

添加bool返回值太简单了,无法开始枚举可能发生的所有问题。你可以有一些预先烘焙的错误代码......但如果你需要,它仍然没有提供任何上下文。

活动没问题。它允许您返回丰富的信息。但这两种方法都需要完全不同的编程模型。异常可以在调用它的同一堆栈线程上处理。可能在完全不同的上下文中调用事件。您可能没有所有可用的信息来通过使用例外来正确处理您可能遇到的故障。 因此,你可以平衡权衡取舍。