哪种返回类型适用于可以成功完成或由于其业务逻辑而失败的方法?基于该返回类型,适当的命名约定是什么?
我的直觉是bool最适合简单的传球/失败。我已经研究并找到了推断 trait 的方法的约定 - 即IsValid,HasFoo,ContainsBar等。但这也是对BuildHouse()或FlyKite()这样的动作的正确命名清楚地表明手术是否成功?
我尝试了几种方法,但每次我都认为它看起来很怪异,而且必须有更好的练习....
bool IsHouseBuilt()
bool TryBuildHouse()
void BuildHouse(out bool success)
PassFailEnum BuildHouse() //seems a little excessive
bool IsKiteFlying()
bool TryFlyKite()
void FlyKite(out bool success)
PassFailEnum FlyKite()
答案 0 :(得分:4)
.NET中所有试图将某些内容解析为其他东西的内置方法(例如int.TryParse
)都称为TryParse
,并返回bool
和out
参数。
所以也许:
public static bool TryBuildHouse(T input, out House house)
答案 1 :(得分:1)
TryBuildHouse似乎是最正确的例子。
答案 2 :(得分:1)
尝试返回值的方法经常被接受的格式为:
bool TryBuildHouse(out object thing);
没有参数试图成功做某事的方法经常被接受的格式是你想要的,真的......有些人更喜欢Try
前缀,因为它通常意味着它可能不会成功,但我想认为bool
返回类型也意味着它可能不会成功。每个人都有自己的。
如果构建某些东西的失败是灾难性的(它绝对应该一直成功),你应该考虑一个void方法,它在罕见的失败情况下抛出一个适当的异常,然后捕获或不捕获它根据您独特的情境和环境要求。
答案 3 :(得分:0)
您应该考虑构建一个类来表示系统中任何类型的调用所需的信息,例如:
public class ActionResult
{
public bool Success { get; set; }
public List<string> Errors { get; }
public ActionResult()
{
// Initialize whatever you want here
Errors = new List<string>();
}
}
然后,当您的方法中出现“错误”或“意外”事件时,您可以使用可能对调用者有用的错误信息填充ActionResult
返回类型。
在你的例子中,你会像这样使用它:
ActionResult BuildHouse()
{
}
答案 4 :(得分:0)
我建议TryParse
但你还没有说明该方法是否实际返回了一个对象。通常,TryParse
表示有输出。如果查看HashSet.Add
方法,如果成功则返回bool但不返回实际的out
值。
因此,从你的情况来看,我会选择像
这样的东西/// <summary>
/// Builds a house
/// </summary>
/// <returns>true if house was built; false if house failed to build</returns>
public bool BuildHouse();
并记录它返回成功/失败bool的事实。如果您打算返回一个对象,例如房子,那么TryParse
选项会有意义,并且您的方法将有一个out
参数来保存新创建的对象。
答案 5 :(得分:0)
很多可能性。我没有提到的是BuildHouse()如果成功则返回一个House对象,如果失败则返回null。