可以成功/失败的操作 - 返回类型&命名惯例

时间:2013-08-02 20:50:34

标签: c# naming-conventions return-value

哪种返回类型适用于可以成功完成或由于其业务逻辑而失败的方法?基于该返回类型,适当的命名约定是什么?

我的直觉是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() 

6 个答案:

答案 0 :(得分:4)

.NET中所有试图将某些内容解析为其他东西的内置方法(例如int.TryParse)都称为TryParse,并返回boolout参数。

所以也许:

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。