我有几种类似的方法,例如.CalculatePoint(...)和CalculateListOfPoints(...).有时,它们可能不会成功,并且需要向呼叫者指出这一点.对于返回通用List的CalculateListOfPoints,我可以返回一个空列表并要求调用者检查这个; 但是Point是一个值类型,所以我不能在那里返回null.
理想情况下,我希望这些方法"看起来"相似; 一种解决方案可能是将它们定义为
public Point CalculatePoint(... out Boolean boSuccess); public ListCalculateListOfPoints(... out Boolean boSuccess);
或者返回一个点?对于CalculatePoint,并返回null以指示失败.这意味着必须回归到非可空类型,这似乎是过度的.
另一种方法是返回布尔boSuccess,将结果(Point或List)作为'out'参数,并将它们称为TryToCalculatePoint或其他...
什么是最佳做法?
编辑:我不想使用Exceptions进行流量控制!有时候会失败.
就个人而言,我想我会使用与TryParse()相同的想法:使用out参数输出实际值,并返回一个布尔值,指示调用是否成功
public bool CalculatePoint(... out Point result);
我不喜欢为"正常"行为使用异常(如果您希望该函数不适用于某些条目).
他们为什么会失败?如果是因为调用者所做的事情(即提供的参数),那么抛出ArgumentException是完全合适的.避免异常的Try [...]方法很好.
我认为提供引发异常的版本是一个好主意,因此,如果他们错了,那些期望他们将始终提供良好数据的呼叫者将收到适当强烈的消息(即异常).
另一种方法是抛出异常.但是,您通常只想在"例外情况"中抛出异常.
如果失败案例很常见(并非例外),那么您已经列出了两个选项. 编辑:您的项目中可能有一个约定如何处理此类非特殊情况(无论是应该返回成功还是对象).如果没有现有的约定,那么我同意lucasbfr并建议你返回成功(这与TryParse(...)的设计方式一致).