【发布时间】:2010-09-14 18:41:40
【问题描述】:
我有几种类似的方法,例如。 CalculatePoint(...) 和 CalculateListOfPoints(...)。有时,他们可能不会成功,需要向调用者表明这一点。对于返回通用列表的CalculateListOfPoints,我可以返回一个空列表并要求调用者检查它;但是 Point 是一个值类型,所以我不能在那里返回 null。
理想情况下,我希望方法“看起来”相似;一种解决方案可能是将它们定义为
public Point CalculatePoint(... out Boolean boSuccess);
public List<Point> CalculateListOfPoints(... out Boolean boSuccess);
或者返回一个点?对于CalculatePoint,返回null表示失败。不过,这意味着必须转换回不可为空的类型,这似乎太过分了。
另一种方法是返回 Boolean boSuccess,将结果(Point 或 List)作为 'out' 参数,然后调用它们 TryToCalculatePoint 或其他东西...
什么是最佳实践?
编辑:我不想使用异常来控制流量!有时会失败。
【问题讨论】:
-
只是一个设计点...如果您要返回一个集合,如果您不成功,请不要返回 null,只需返回一个空集合。我投票支持 TryCalculate 返回一个布尔值。
-
由于参数超出范围而未完成的方法不是“流控制”,这是一种意外和异常情况。
-
@Will:我同意,这就是我所说的空列表的意思。 @Rich:同意;但是参数可以很好,只是可能没有合适的返回点。
-
@Joel:那么您可能需要尝试模式,但是,对于您在问题中列出的内容,您应该抛出异常。
标签: c# methods return-value