Osc*_*ros 7 c# exception-handling exception
我在The Pragmatic Programmer和其他一些文章(包括来自Joel Spolsky的文章)中读过,你应该只在异常情况下抛出异常.否则,您应该返回错误.
有时它是可能的(例如,返回-1,-0或者positive number),但是在其他情况下这是不可能的.我的意思是,如果你正在返回课程,你总是可以返回null,但我认为这个想法是返回一些能够提醒来电者发生的事情.
如果我总是返回null,我认为说:如果此方法返回null,则可能是因为A,B,C,D或E
那么,如何在C#中实现这一目标呢?
编辑:
我发布这个问题后的几个小时,我在这里看到了另一个问题,问题本身就是关于发布的代码是否是一个好的做法.
我看到这是我在这里做的事情的另一种方式.链接在这里:
jam*_*kes 12
什么时候抛出异常的更好的规则是这样的:
当你的方法无法按照它的名字所说的那样做时,抛出异常.
空值可用于表示您已经要求不存在的内容.不应该为任何其他错误条件返回它.
规则"只在异常情况下抛出异常"是无助于IMO的问题,因为它没有给出基准来指示什么是异常和什么不是.这就像说"只吃可食用的食物".
一个要考虑的例子是int.TryParse.它使用一个out参数作为解析值,一个bool返回值表示成功或失败.在bool可以与如果情况值得它枚举或更复杂的对象来代替.(例如,数据验证可能会以真正保证收集故障的方式失败等)
使用.NET 4的替代方案是Tuple...所以int.TryParse 可能是:
public static Tuple<int, bool> TryParse(string text)
Run Code Online (Sandbox Code Playgroud)
下一种可能性是使对象封装整个结果,包括适当的故障模式.例如,Task<T>如果失败,您可以询问其结果,状态和异常.
所有这一切只有在发生这种情况并不是真正的错误时才适用.它并不表示错误,只是用户输入错误.我真的不喜欢返回错误代码 - 异常在.NET中更为惯用.